複数の拡張子を持つファイルをコピーする


22

複数の拡張子を持つファイルを単一の宛先ディレクトリにコピーしたいと思います。

たとえば、次のコマンドを使用して、作業ディレクトリ内のすべての.txtファイルをというディレクトリにコピーできますdestination

cp -v *.txt destination/

そして、以下を使用して、作業ディレクトリ内のすべての.pngディレクトリをにコピーできますdestination

cp -v *.png destination/

ただし、これらを個別のコマンドとして入力するのは時間がかかります(コマンド履歴を使用する場合でも)。だから、私が言うことができることをどのような方法があるcpパターンのいずれかでファイルをコピーする*.txt か、パターン*.pngにはdestination 理想的には、3つ以上のパターンを指定できるようにしたいと考えています。たとえば、cpすべて*.txt または *.png または *.jpgファイルをにコピーするように指示するdestinationなどです。

これはすべて、シェルスクリプトを使用して可能になると確信しています(bashたとえば、を使用しています)が、コンソールからのみ、より簡単に実行する方法はありますか?何とかしてブレース拡張を使用してそれを行うことはできますか?

特定の特定のパターン一致するファイルを除く、作業ディレクトリ内のすべてのファイルコピーできることは知っていますが、作業ディレクトリ、コピーしたくないファイル拡張子がはるかに多く含まれているため、苦労します。

これについて何か考えはありますか?


10
cp -v *.txt *.png destination/
iruvar

回答:


55

ブレースの拡張により、仕事が完了します。 man bashを検索しBrace Expansionます。

cp *.{txt,jpg,png} destination/

編集:

OPのリクエストに合わせて、上記のコマンドには詳細オプションがありませんでした。

cp -v *.{txt,jpg,png} destination/

2
Windowsでこれを実行できますか?
セルジオ

私が行う場合cp data/images/*.{jpg,jpeg,png,mp4} destination/mp4、ファイルが存在しない場合、私は取得No such file or directoryするスクリプトを壊すエラーを。複数の拡張機能で欠落している形式を適切に処理できますか?
BradGreens

1
@BradGreensコメントでここに尋ねるのではなく、本当に新しい質問を投稿すべきです。あなたの質問にはすでに答えがあるかもしれません。新しい質問を投稿すると、回答が得られるだけでなく、同じヘルプを必要とする他の人が検索できるようになります。
ティモシーマーティン

0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

動作します!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.