特定のタイプのファイルを再帰的に移動し、それらのディレクトリ構造を維持します



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 / {} ;