readlink -fが期待どおりに機能しない

readlink -fが期待どおりに機能しない

練習用に作成したスクリプトは次のとおりです。現在のディレクトリサブツリーですべての一般ファイルを繰り返し検索し、最後の変更日を昨日に変更する必要があります。

#!/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つの日付が作成されます。file2a

ベストアンサー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

おすすめ記事