現在、5日以上前のファイルを、変更するルートフォルダーを除き、同じパスを持つアーカイブフォルダーに移動できるスクリプトを作成しています。 root/subdir1/subdir2/file
からrootarchive/subdir1/subdir2/file
のようになります。再帰的に動作するはずです。
「ルート」フォルダーのすべてのファイルに対してforeachを作成しようとしました。
#!/bin/bash
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
mv $file ../rootarchive/"$file"
done
しかし、mvコマンドは指定された宛先../rootarchive/"$file"
を見つけることができなかったため、これは適切に機能しませんでした。あなたの誰かが私がこの問題を解決する方法を知っていますか?
subdir1/subdir2/
からディレクトリツリーを作成する必要があります-mv
は作成しません。たとえば、次のことができます。
find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
dir="${file%/*}"
mkdir -p ../rootarchive/"$dir"
mv "$file" ../rootarchive/"$file"
done
rsync
でした。ディレクトリ構造を再作成し、コピーしたファイルを削除できます。
find . -type f -mtime +5 -print0 |
rsync -0avP --remove-source-files --files-from=- ./ ../rootarchive
rsync
の場合:
-0
は、ファイルリストがヌルで区切られていることを示します。これが影響します:--files-from=
は、コピーするファイルのリストを読み取ります(stdin:-
から)。-a
は、ファイルの許可、所有権などを保持するアーカイブモードを有効にします。--remove-source-files
は、コピーされたファイルを削除します正常にソースから。-vP
詳細モードと進行情報を有効にします。