シェルスクリプトを使用して接頭辞と接尾辞が一致するファイルをコピーする

シェルスクリプトを使用して接頭辞と接尾辞が一致するファイルをコピーする

次のファイルを含むディレクトリがあります。

aaaXXXbbb.png
aaaYYYccc.png
xxxAAAyyy.png
yyyAAAxxx.png

シェルスクリプトを使用して、プレフィックス「aaa」とサフィックス「.png」を含むすべてのファイルを新しいディレクトリにコピーしたいと思います。 2つのファイル「aaaXXXbbb.png」と「aaaYYYccc.png」を考えてみましょう。

ベストアンサー1

cp aaa*.png /some/destdir

これは、文字列で始まり文字列で終わるaaaすべてのファイル名と一致し、.pngすべてディレクトリにコピーされます/some/destdir*名前の真ん中にあるすべての文字と一致します。

このパターンに一致する数千のファイルがあると、結果リストが長すぎるため、この操作は失敗します。

この場合は、次のループのようなものを使用してください。

for name in aaa*.png; do
    cp "$name" /some/destdir
done

これにより、ファイルが1つずつコピーされます。

何千ものファイルに対するより効率的なアプローチは次のとおりです(GNUcpとその-tオプションを使用)。

find . -maxdepth 1 -type f -name 'aaa*.png' -exec cp -t /some/destdir {} +

または(GNUなしcp):

find . -maxdepth 1 -type f -name 'aaa*.png' -exec sh -c 'cp "$@" /some/destdir' sh {} +

最後のコマンドは、現在のディレクトリで名前がパターンと一致するすべての一般的なファイルを探しfind、これらのファイルの配置に対して短いインラインシェルスクリプトを呼び出します。短いインラインシェルスクリプトは、現在のバッチ(適切で管理可能なファイル数)のファイルをターゲットディレクトリにコピーします。-type f-maxdepth 1aaa*.png

find使用に関する追加情報-exec「find」の-execオプションについて

おすすめ記事