変更時間に基づいてファイルを並べ替える

変更時間に基づいてファイルを並べ替える

ここでは、次の構造を使用する多くの質問と回答を見ました。

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

おすすめ記事