当前工作目录有多个测试文件,编号在 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
答案1
$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 {} +