Bash
複製具有多個副檔名的文件
我想將具有多個副檔名的文件複製到單個目標目錄。
例如,我可以使用以下命令將工作目錄中的所有**.txt**
destination
文件複製到名為 的目錄中:cp -v *.txt destination/
我可以使用以下內容將工作目錄中的所有**.png**
destination
目錄複製到:cp -v *.png destination/
但是將這些作為單獨的命令鍵入(即使使用命令歷史記錄)也很耗時。那麼,有什麼方法可以告訴我
cp
將帶有模式*.txt
或模式的文件複製*.png
到destination
? 理想情況下,我希望能夠指定兩個以上的模式——例如,指示cp
將所有*.txt
或*.png
或*.jpg
文件複製到destination
.我確信所有這些都可以使用 shell 腳本
bash
來實現——例如,我正在使用 ——但是有什麼方法可以更簡單地完成它,只需從控制台?我可以以某種方式使用大括號擴展來做到這一點嗎?我知道可以複製工作目錄中的所有文件,除了那些與某些指定模式匹配的文件,但是由於我的工作目錄包含的文件副檔名比我不想複製的文件副檔名多得多,那將是一件痛苦的 事。
你對此有什麼想法嗎?
大括號擴展將完成工作。
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
那行得通!