ここでは、次の構造を使用する多くの質問と回答を見ました。
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
または
ls -t | while read i; do
今私はあなたを知っていますlsはスクリプトに使用しないでください。簡単に壊れるため、最後に変更されたものから最後に変更されたものの順に(またはその逆)ファイルを操作するより良い方法が見つかりません。
次のようなものを使用できます。
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
...しかし、名前に改行が含まれているファイルはまだ破損し、起動が悪くなります。もっと良い方法がありますか?
ベストアンサー1
「スクリプトでlsを使用しないでください」は、POSIX ls「only」の問題です。 GNU lsを参照してください--quoting-style=
。
GNUソートはこの問題を解決します--zero-terminated
。
互換性が必要な場合は、find ... -exec
エスケープを実行するスクリプトにファイル名を一度に1つずつ渡すことができます。少なくともbashが利用可能な場合:
start cmd:> testfunc () { echo "${1//$'\n'/\n}"; }
start cmd:> testfunc a$'\n'b
a\nb