特定のタイプのファイルを再帰的に移動し、それらのディレクトリ構造を維持します
Recursively Move Files Certain Type
解決:
それはあなたのO / Sにわずかに依存し、より具体的にはあなたのバージョンの施設に依存しますタールとあなたがコマンドを持っているかどうか
cpio。また、ファイル名に改行(特に)が含まれているかどうかにも少し依存します。ほとんどの人はそうしません。
オプション1
cd / old-dirfind。 -name '* .mov' -print | cpio -pvdumB / new-dir オプション#2
探す 。 -name '* .mov' -print | tar -c -f --- T- | (cd / new-dir; tar -xf-)NScpioコマンドにはパススルー(コピー)モードがあり、標準入力でファイル名のリストを1行に1つずつ指定して、必要な処理を正確に実行します。
のいくつかのバージョンtarコマンドには、標準入力からファイル名のリストを1行に1つずつ読み取るオプションがあります。 MacOS Xでは、そのオプションは-T-(孤独な場所-「標準入力」を意味します)。最初にtarコマンド、オプション-f-は(でアーカイブを作成するコンテキストで)を意味します-c、標準出力への書き込み); 2番目にtarコマンド、-xオプションは、-f-は「標準入力からの読み取り」を意味します。
他のオプションがあるかもしれません。のマニュアルページまたはヘルプ出力を参照してください。かなり慎重にタール。
このプロセスでは、ファイルを移動するのではなくコピーします。操作の後半は次のようになります。
探す 。 -name '* .mov' -exec rm -f {} +
大きなファイルであるため、同じファイルシステム上にある場合は、それらをコピーするのではなく、移動中にディレクトリ構造を複製するだけです。この機能を使用できます:
#ファイル(またはフォルダー)をそのフォルダー構造を保持して移動します(ソースパスに対して)#使用法:move_keep_pathソース宛先move_keep_path(){#1つ上のレベルまでディレクトリを作成しますmkdir -p'`dirname '$ 2'`' mv '$ 1 '' $ 2 '}または、既存のディレクトリのマージにサポートを追加します。
#ファイル(またはフォルダー)をそのフォルダー構造を保持して移動します(ソースパスに対して)#使用法:move_keep_pathソース宛先move_keep_path()#1つ上のレベルまでディレクトリを作成しますmkdir -p'`dirname '$ 2'`' if [[- d '$ 1' && -d '$ 2']];次に#既存のフォルダをマージしますfind '$ 1'-depth 1
アサーション:改行文字を含むファイルはありません。ただし、スペースは問題ありません。
#最初のテスト:フォルダの作成が見つかります。 -type f -iname *。mov-printf '%h n' |並べ替え| uniq | xargs -n 1 -d ' n'-I' {} 'echo mkdir -vp' / TARGET_FOLDER_ROOT / {} '#空のターゲットフォルダの作成を実行します。 -type f -iname *。mov-printf '%h n' |並べ替え| uniq | xargs -n 1 -d ' n'-I' {} 'mkdir -vp' / TARGET_FOLDER_ROOT / {} '#最初にテスト:移動するファイルを確認するfind。 -type f -iname *。mov-exec echo mv {} / TARGET_FOLDER_ROOT / {} ; #EXECUTE MOVE FILESfind。 -type f -iname *。mov-exec mv {} / TARGET_FOLDER_ROOT / {} ;