web-dev-qa-db-ja.com

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
2
zundarz

これは私にとってはうまくいきましたが、あなたが何をしているのかに応じて、その変数を引用符で囲まないままにすることはおそらくお勧めできません。おそらく、ls以外のものも使用する必要があります。 http://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 \;
2
jesse_b

?lsの機能ではなく、シェルの機能であり、 ファイル名展開 またはワイルドカード展開またはパターンマッチングまたは グロビング と呼ばれます。シェルでワイルドカード展開を実行して、lsが一致するファイル名のリストを受け取るようにする必要があります。

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

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