將具有相同文件副檔名 .txt 的所有文件移動到新目錄
基本上,我的硬碟很亂,我在一個主目錄中有 200 多個子目錄。我想基本上將 200 多個具有副檔名
.txt
等的子目錄中的所有文件移動到一個新目錄。例如,n00b.txt
或n00b.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
.
sudo
PS:正如@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
被視為在這種情況下應該被處理的東西,一個命令,而不是一個字元串。