これは私が練習用に書いているスクリプトです。現在のディレクトリのサブツリーにあるすべての通常のファイルを再帰的に検索し、最終変更日を昨日に変更する必要があります。
#!/bin/bash
YESTERDAY=$(date -d yesterday)
RFILES=$(ls -lR | egrep '^-' | rev | cut -d" " -f1 | rev)
for i in $RFILES ; do
ABSPATH=$(readlink -f $i)
touch "$ABSPATH" -d "$YESTERDAY"
done
次のようなサブツリーのあるディレクトリで呼び出すと、次のようになります。
a
|___ b
| |__ file1
| |__ file2
|
|__ file3
|__ file4
readlink
期待どおりに動作しません。私は何を意味することは、と私に伝えていることであるfile1
とfile2
ディレクトリの中にありますa
。したがって、touch
最終変更日を変更するために使用するfile1
とfile2
、さらに2つが作成され、a
ディレクトリに昨日の日付が作成されます。
まず、コマンドls -lR | egrep '^-' | rev | cut -d" " -f1 | rev
はパスなしでファイル名を表示するだけです。パスを含むすべてのファイルを取得する必要がある場合はfind ./ -type f
、その出力を使用して解析できます。したがって、readlink -f $i
コマンドは必要ありません。
次に、より効果的なソリューションが必要な場合は、次のパラメータfind
をexec
使用したコマンドのみが必要です。
find . -type f -exec touch -d "$YESTERDAY" {} +
-type f find regular files
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加