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

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

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

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

cp -v *.txt destination/

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

cp -v *.png destination/

ただし、これらのコマンドを別のコマンドとして入力するのは時間がかかります(コマンド履歴を使用しても)。cpそれでは、次のパターンを使用してファイルをコピーするように指示する方法はありますか?*.txt またはモードが*.png到着しましたdestinationか? 理想的には、2つ以上のモードを指定できることを願っています。たとえば、cpすべてのアイテムをコピーするように指示するのと同じです。*.txt または *.png または *.jpgファイルをに保存しますdestination(例:

これはすべてシェルスクリプトを使用して実行できると確信しています。bashたとえば、私はシェルスクリプトを使用しています。しかし、コンソールでより簡単に行う方法はありますか?どういうわけか中括弧拡張を使用してこれを実行できますか?

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

これについてどんな考えがありますか?

答え1

ブレース拡張で作業が完了します。 man bashそして検索してくださいBrace Expansion

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

編集する:

OPの要求と一貫性を維持するために、上記のコマンドには詳細なオプションがありません。

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

答え2

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

それだけです!

関連情報