web-dev-qa-db-ja.com

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

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

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

cp -v *.txt destination/

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

cp -v *.png destination/

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

これはすべて、シェルスクリプトを使用して可能であると確信しています-たとえば、bashを使用しています-コンソールからそれをより簡単に達成する方法はありますか?どういうわけかそれを行うためにブレース拡張を使用できますか?

特定のパターンに一致するファイルを除く 作業ディレクトリ内のすべてのファイルをコピーすることは可能です ですが、私の作業ディレクトリにははるかに多くのファイル拡張子が含まれているため、しない私よりもコピーしたいdo、それは苦痛でしょう。

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

24
Andrew

ブレースの拡張は仕事を成し遂げるでしょう。 man bashと検索してBrace Expansion

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

編集:

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

cp -v *.{txt,jpg,png} destination/
59
Timothy Martin
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

うまくいきました!

0
Ofek Ortal