web-dev-qa-db-ja.com

Linux:複雑なディレクトリ構造内の正確な場所が不明な特定の名前パターンのファイルをコピーする方法

XYZ *という名前のすべてのファイルを1つのフォルダーにコピーしたい。問題は、ファイルが異なるサブフォルダーにあり、フォルダー構造の深さもすべてのファイルで同じではないことです。幸い、少なくとも各ファイルには一意の名前が付いています。

もちろん、cpコマンドについて考えましたが、これが機能するには、フォルダー構造の深さが同じである必要があると思います。

7
Mike

Bashを使用して(find ... -exec cp ...を使用する場合のように)多くの個別のプロセスを開始することを避けたい場合(および**形式にzshがない場合)、次のように単一のcpを実行できます。

cp -p $(find path/to/src -name 'XYZ*') path/to/dest

$(...)フォームは、逆引用符で囲まれたプロセス置換のposixバージョンです。以下は例です。

find . -name 'd*a'
cp -p $(find . -name 'd*a') ../zeta
ls ../zeta

これらのコマンドにより、次の出力が生成されました。

./.?/dx2a
./.?/dx4a
./.tdot1/dx1a
./.tdot2/dx2a
cp: will not overwrite just-created `../zeta/dx2a' with `./.tdot2/dx2a'
dx1a  dx2a  dx4a

これには find を使用できます:

$ find path/to/src -type f -name XYZ\* -exec cp -p {} path/todest/ \;
2
Paul R

Bashの代わりにzshを使用する場合は、**ファイルのglobパターンを使用できます。これは、すべてのサブフォルダーに再帰的に一致します。

cp path/to/src/**/XYZ* path/to/dest
1
Dave Kirby