如何移動名稱包含多個特殊字元(如“锓䔓空格”)的檔案?

如何移動名稱包含多個特殊字元(如“锓䔓空格”)的檔案?

我正在嘗試將文件從當前目錄移動到另一個目錄。我遇到的問題是多個文件的名稱帶有特殊字符,例如space, ü, &, (, ....如何使用以下命令移動所有檔案:ls | grep mp4 | xargs -i mv {} mp4,其中{}應該是目前檔案的名稱,而 mp4 是放置所有檔案的目的地。我已經嘗試過該命令,但它顯示錯誤。你能幫忙嗎?

答案1

情況正是如此你不想使用lsxargs使用預設設置,它將按空格分割輸入,並專門處理引號和反斜線。您需要使用-0分隔空位元組的輸入,或-d'\n'分隔換行符號(GNU xargs)來關閉該行為。

由於所有檔案都位於同一目錄中,因此您可以使用 shell:

mv *mp4* mp4/

或者,如果您僅指具有副檔名mv *.mp4 mp4/的檔案。mp4第一個會警告mp4自己移動到mp4


如果檔案不在同一目錄中,則需要使用雙星(zsh- 預設啟用或kshwithset -o globstarbashwith shopt -s globstar):

mv **/*mp4* mp4/

或者find

find . -type f -name "*mp*" -exec mv {} mp4/ \;

答案2

命令:

ls | grep mp4 | xargs -i mv {} mp4

在大多數情況下可以被更簡單和更強大的取代:

mv *mp4* mp4

您可以忽略目錄 mp4 不可在其內部移動的警告。

請注意,此腳本與您的腳本一樣,正在移動mp4名稱中任何位置出現「 」的所有檔案(例如:mp4list.txt, lamp4.jpg)。如果您實際上只想移動擴展名為“ .mp4”的文件,您可以使用:

mv *.mp4 mp4

mp4這將防止出現導致有關目錄本身的錯誤訊息的情況。

如果 mp4 檔案的數量很大並且阻止前一個命令工作,您可以使用 GNUfind來實現相同的目的:

find . -maxdepth 1 -name "*mp4*" -exec mv -t mp4 {} +

或者

find . -maxdepth 1 -name "*.mp4" -exec mv -t mp4 {} +

相關內容