複数の拡張子を持つファイルを単一の宛先ディレクトリにコピーしたいと思います。
たとえば、次のコマンドを使用して、作業ディレクトリ内のすべての.txtファイルをdestination
というディレクトリにコピーできます。
cp -v *.txt destination/
そして、以下を使用して、作業ディレクトリ内のすべての.pngディレクトリをdestination
にコピーできます。
cp -v *.png destination/
ただし、これらを個別のコマンドとして(コマンド履歴を使用していても)入力するには時間がかかります。では、cp
に*.txt
またはパターン*.png
からdestination
のいずれかのパターンでファイルをコピーするように指示する方法はありますか? 理想的には、たとえば、cp
にすべての*.txt
または*.png
または*.jpg
ファイルをdestination
にコピーするように指示するなど、3つ以上のパターンを指定できるようにしたいと思います。
これはすべて、シェルスクリプトを使用して可能であると確信しています-たとえば、bash
を使用しています-コンソールからそれをより簡単に達成する方法はありますか?どういうわけかそれを行うためにブレース拡張を使用できますか?
特定のパターンに一致するファイルを除く 作業ディレクトリ内のすべてのファイルをコピーすることは可能です ですが、私の作業ディレクトリにははるかに多くのファイル拡張子が含まれているため、しない私よりもコピーしたいdo、それは苦痛でしょう。
これについて何か考えはありますか?
ブレースの拡張は仕事を成し遂げるでしょう。 man bash
と検索してBrace Expansion
。
cp *.{txt,jpg,png} destination/
編集:
OPの要求に合わせて、上記のコマンドには詳細オプションがありませんでした。
cp -v *.{txt,jpg,png} destination/
for filename in /Photos/directory/* ; do
filenameWithoutPath="${filename##*/}"
first_num="${filenameWithoutPath%%.*}"
last_num="${filenameWithoutPath##*.}"
cp $filename /Photos/directory/$first_num-$last_num.jpg
done
うまくいきました!