練習用に作成したスクリプトは次のとおりです。現在のディレクトリサブツリーですべての一般ファイルを繰り返し検索し、最後の変更日を昨日に変更する必要があります。
#!/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
としてディレクトリに2つの日付が作成されます。file2
a
ベストアンサー1
まず、コマンドは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