lsをどのように使用しますか? 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

答え1

?関数ではなく、lsシェルの関数です。ファイル名拡張子またはワイルドカード拡張またはパターンマッチングワイルドカードls一致するファイル名のリストを取得するには、シェルでワイルドカード拡張を実行する必要があります。

変数にワイルドカード文字を含む文字列があり、そのワイルドカード文字を一致するファイル名に拡張するには、変数の置換を引用符なしで残します。これは「split+glob」演算子です。値はスペースで区切られた部分に分割され、各部分は一致するファイル名のリストに置き換えられますが、ファイル名と一致しない部分は変更されません。

FOOBAR_LIST="foobar_??????.log"
ls -lt $FOOBAR_LIST

答え2

これは私にとって効果的でしたが、実行している操作によっては、変数を引用符で囲んでいないままにしておくことはお勧めできません。おそらく、次のもの以外のものを使用する必要がありますlshttp://mywiki.wooledge.org/ParsingLs

foob​​ar_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 \;

関連情報