it-mure.jp.net

Linux:dirおよびsubdirsからpatternに一致するすべてのファイルを単一のdirにコピーします

すべてをコピーしたい場合*.sosrcからdstまでのファイル:

cp src/*.so dst

ただし、すべてをコピーしたい*.so srcおよびit's subdirsからdstへのファイル。手がかりはありますか?

32

試してください:

find src/ -type f | grep -i so$ | xargs -i cp {} dst
38
Mike Insch

Bashを使用している場合は、globstarシェルオプション をオンにして、ファイルとディレクトリを再帰的に照合できます。

shopt -s globstar
cp src/**/*.so dst

名前が.で始まるファイル、および/または名前が.で始まるディレクトリ以下のファイルを検索する必要がある場合は、dotglobオプションも設定します(例:shopt -s dotglob)。両方を1つのコマンドで設定できます。

shopt -s globstar dotglob
17
jáquer

私はマイクが提案したコマンドを試しました:

find src/ -type f | grep -i so$ | xargs -i cp {} dst

しかし、すべてのファイルがディレクトリdstにダンプされ、相対パスが失われてしまいました。

相対パスを維持するには、コマンドを次のように変更する必要があります。

find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
8
Ilya Druker

これを行う別の方法は次のとおりです。

find src/ -type f -name "*.so" -exec cp {} dst/ \;
3
Kyriakos

Grepは、findの-nameを使用して置き換えることができます。

find src/ -type f -name "*.so" | xargs -i cp {} dst/{}
1
Th. Thielemann