特定の種類のすべてのファイルをUnixの特定のディレクトリに移動(またはコピー)する方法は?

特定の種類のすべてのファイルをUnixの特定のディレクトリに移動(またはコピー)する方法は?

grep/find/awk/xargsまだすべての技術に精通していません。

特定のパターンに一致するファイルがあります(例:)*.xxx。このファイルは、いくつかのディレクトリの任意の場所にあります。これらのファイルをすべて見つけて、Unixのホームディレクトリ(まだ存在しない場合があります)にあるフォルダに移動するにはどうすればよいですか?

答え1

mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;

答え2

ディレクトリ階層内のすべてのファイルを単一のターゲットディレクトリに移動するには、bash ≥4(shopt -s globstarあなたのものを入れてください~/.bashrc)またはzshから:

mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory

他のシェルでは:

mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;

このコマンドを読む方法find

  • .:現在のディレクトリに移動します。
  • -name '*.xxx':名前がこのパターンと一致するファイルを処理します。
  • -exec … \;:各ファイルに対してこのコマンドを実行し、{}ファイルパスに置き換えます。

ファイルが多い場合は、ファイルごとに別々のプロセスを呼び出すfind必要がないため、より高速でより複雑なコマンドがあります。mv

find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +

+最後のコマンドは、find一度に複数のファイルに対してコマンドを呼び出すように指示します。findファイル名はコマンドラインの末尾にのみ入力でき、ターゲットディレクトリは最後に来る必要があるため、中間mvシェルを使用して引数を並べ替えます("$0"シェルの最初の引数は~/new-directory後続の"$@"引数findを拡張したものです{})。 。

答え3

ソースファイルと一致するディレクトリ構造を新しいターゲットディレクトリにコピーするには、GNU cp- 親オプション:

mkdir /path/to/target_dir
cd source_dir
find . -name '*.xxx' -exec cp -iv --parents -t /path/to/target_dir {} +

答え4

あなたも-exec‍

mkdir /path/to/dest    
cp `find /path/to/source -name "*.jar"` /path/to/dest

関連情報