為什麼 find 和 exec mv 不移動所有文件?
目前工作目錄有多個編號在 1 到 100 之間的測試文件。這些文件的標題
1.txt
為100.txt
.該命令
find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +
將所有文件移動一個,例如15.txt
.相反,該命令
find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec mv {} "TestDir - Level One"/ \;
移動所有文件。如果
find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +
再次執行該命令,則返回錯誤mv: missing destination file operand after 'TestDir - Level One' Try 'mv --help' for more information.
的版本
find
是find (GNU findutils) 4.7.0-git
您缺少將
$0
字元串分配給bash -c '…'
呼叫。呼叫的第一個參數find
被分配給$0
(shell 的名稱)而不是,$1
因此不會被移動。
-c
如果-c
存在該選項,則從第一個非選項參數 command_string 中讀取命令。如果在 command_string 之後有參數,則將第一個參數分配給位置參數,$0
並將任何剩餘的參數分配給位置參數。賦值$0
設置 shell 的名稱,用於警告和錯誤消息。(強調我的)
將您的命令更改為
find . [more find options…] -exec bash -c 'mv "$@" "TestDir - Level One"' bash {} +