Bash
如何使用 ls ?bash變數中的選項?
我想使用 ls ?Bash 變數中的選項。
我如何讓腳本做同樣的事情
ls -lt foobar_??????.log
?$ cat foobar_ls.sh #!/bin/bash FOOBAR_LIST="foobar_??????.log" ls -lt "$FOOBAR_LIST"
這是提示版本:
$ls -lt foobar_??????.log -rw-r--r-- 1 foobar foobiz 0 Nov 1 14:58 foobar_000003.log -rw-r--r-- 1 foobar foobiz 0 Nov 1 14:58 foobar_000002.log -rw-r--r-- 1 foobar foobiz 0 Nov 1 14:58 foobar_000001.log
這是我的腳本版本:
$ ./foobar_ls.sh ls: cannot access foobar_??????.log: No such file or directory
這對我有用,但取決於你在做什麼,不引用該變數可能不是一個好主意。您可能還應該使用以下內容:http
ls
: //mywiki.wooledge.org/ParsingLsfoobar_ls.sh
#!/bin/bash FOOBAR_LIST="foobar_??????.log" ls -lt ${FOOBAR_LIST}
為了重命名這些文件,您可以執行以下操作之一:
shopt -s nullglob for file in /path/to/files/foobar_??????.log; do mv "$file" "${file}.old" done shopt -u nullglob
或者
find /path/to/files -type f -name 'foobar_??????.log' -exec mv {} {}.old \;
?
不是 的特性ls
,它是 shell 的特性,稱為文件名擴展或萬用字元擴展或模式匹配或萬用字元。您必須讓 shell 執行萬用字元擴展,以便ls
接收匹配文件名的列表。如果您的變數中有一個帶有萬用字元的字元串,並且您想將這些萬用字元擴展為匹配的文件名,請不要引用變數替換。這是“split+glob”操作符:值被分割成空格分隔的部分,每個部分都被匹配的文件名列表替換,除了不匹配任何文件名的部分保持不變。
FOOBAR_LIST="foobar_??????.log" ls -lt $FOOBAR_LIST