Bash

複製具有多個副檔名的文件

  • November 6, 2016

我想將具有多個副檔名的文件複製到單個目標目錄。

例如,我可以使用以下命令將工作目錄中的所有**.txt**destination文件複製到名為 的目錄中:

cp -v *.txt destination/

我可以使用以下內容將工作目錄中的所有**.png**destination目錄複製到:

cp -v *.png destination/

但是將這些作為單獨的命令鍵入(即使使用命令歷史記錄)也很耗時。那麼,有什麼方法可以告訴我cp將帶有模式*.txt 模式的文件複製*.pngdestination 理想情況下,我希望能夠指定兩個以上的模式——例如,指示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

那行得通!

引用自:https://unix.stackexchange.com/questions/157286