Command-Line

將具有相同文件副檔名 .txt 的所有文件移動到新目錄

  • December 24, 2019

基本上,我的硬碟很亂,我在一個主目錄中有 200 多個子目錄。我想基本上將 200 多個具有副檔名.txt等的子目錄中的所有文件移動到一個新目錄。例如,n00b.txtn00b.txt.exe

所以我在包含 200 多個子目錄的主目錄中嘗試以下命令sudo mv **/*.txt ~/Desktop/tmpremo/

相反,我收到了這個錯誤:bash: /usr/bin/sudo: Argument list too long

為什麼我會得到它,我該如何刪除 say .txt,.txt.exe?我如何解決它?

這會將目前目錄(甚至在子目錄中)內任何位置存在的所有文件.txt和副檔名移動到..txt.exe``~/Desktop/tmpremo

$ sudo find . -type f \( -iname '*.txt' -o -iname '*.txt.exe' \) -exec mv {} ~/Desktop/tmpremo \;

如果您還想要另一個副檔名,只需-o -iname '*.extension'-exec.

sudoPS:正如@xenoid 所指出的,除非手頭的任務絕對需要,否則請不要使用。

(這裡是新手,所以我無法評論@BarBar1234 的回答)

我相信沒有必要回顯“查找”的輸出,因為命令本身已經回顯了創建的文件名。

因此,您可以只使用:

sudo find . -type f -iname '*.txt'

但是,為了知識起見,您得到的輸出 ( find: ‘echo ./rdggt_169/frretcdd_td.txt ’: No such file or directory) 發生是因為在命令中

sudo find . -type f -iname '*.txt' -exec 'echo {}'  \;

所說的部分-exec 'echo {}'是為 提供單引號參數-exec,因此,它將整個擴展字元串視為命令。

需要明確的是,字元串 ’echo foo/bar.txt’ 不是echo帶有 ‘foo/bar.txt’ 參數的命令,這就是為什麼在您的系統中沒有找到任何命令,因為您的系統中不存在名稱為 的命令echo foo/bar.txt

這就是為什麼 BarBar1234 剛剛編輯了答案,刪除了單引號。現在echo被視為在這種情況下應該被處理的東西,一個命令,而不是一個字元串。

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