定期的に更新されるフォルダのセットがあります。定期的に解析して、単純なテキストファイルリストに更新したいと思います。このリストはrsyncで使用されるので、簡単に同期できるようにsedを使用してファイル名を短くします。
これらは次のように設定されています。
私は次のようなことを試しました:
for dir in `find -maxdepth 2 -type d -name '*BETA'`; do test `find $dir -type f -mtime -1` | echo $dir | sed "s|^\./||" >> list.txt; done
しかし、出力にはまだすべてのベータフォルダがリストされています(そして.aspx
ファイルで「不明なオペランド」エラーが発生しますか?)。
スクリプトが少なくとも1つの変更されたファイルを見つけてフォルダーリストを更新した後、スクリプトが次のフォルダーに移動できるとしたら、それはボーナスになります。そのため、フォルダーごとに残りのファイルを繰り返す必要はありません。
新しいファイル(*BETA
)が含まれるすべての-mtime -1
ディレクトリを検索し、それらのディレクトリ名をlist.txt
に保存するには、次の手順を実行します。
find -type f -path '*BETA/*' -mtime -1 | sed 's|^\./||; s|BETA/.*|BETA|' | sort -u >list.txt
目標はファイルlist.txt
に改行で区切られたデータを作成することなので、ディレクトリまたはファイルのいずれにも改行文字を含む名前を付けないことを意味する必要があります。もしそうなら、もちろん、別の出力フォーマットが必要になります。
find -type f -path '*BETA/*' -mtime -1
これにより、パスのどこかに親ディレクトリがあり、-mtime -1
のfindの規則によってnewが定義されている場合、名前がBETA
で終わるすべての新しいファイルが検索されます。
sed 's|^\./||; s|BETA/.*|BETA|'
これにより、ファイル名から最初の./
が削除され、BETA
の後のすべても削除されます。結果は、BETAディレクトリの名前です。
sort -u
sed
が作成するディレクトリリストは重複します。これにより、重複が削除されます。
>list.txt
これにより、出力がlist.txt
に保存されます
次のアプローチは、ディレクトリまたはファイルの名前に改行文字が含まれている場合でも安全です(これにはGNUツールが必要な場合があります):
find -type f -path '*BETA/*' -mtime -1 -print0 | sed -z 's|^\./||; s|BETA/.*|BETA|' | sort -zu >list.out
これにより、ディレクトリ名がnulで区切られた形式のファイルlist.out
が作成されます。ヌル文字はファイル名またはディレクトリ名に表示されないため、これは安全な方法です。 list.out
を使用するには、もちろん、nulで区切られた入力を理解するツールでそれを読む必要があります。