Bash

如何使用 ls ?bash變數中的選項?

  • November 1, 2017

我想使用 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/ParsingLs

foobar_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

引用自:https://unix.stackexchange.com/questions/401910