複数の拡張子を持つファイルを単一の宛先ディレクトリにコピーしたいと思います。
たとえば、次のコマンドを使用してすべての項目をコピーできます。。 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
それだけです!