Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 我使用了'-打印0';选项来处理带有空格的文件名,但我得到一个错误_Bash_Shell_Find_Rename_Mv - Fatal编程技术网

Bash 我使用了'-打印0';选项来处理带有空格的文件名,但我得到一个错误

Bash 我使用了'-打印0';选项来处理带有空格的文件名,但我得到一个错误,bash,shell,find,rename,mv,Bash,Shell,Find,Rename,Mv,我使用了'-print0'选项来处理带有空格的文件名,但出现了一个错误 #!/bin/bash find /home/data -name '*QQ*' -print0 -exec bash -c ' mv $1 ${0/\-QQ/-TT}' {} \; 哪一部分错了 谢谢您不需要-print0,因为您不需要将输出传输到其他程序 您只需要在bash命令中正确引用 /home/data/gone to sea.1080p-QQ.mp4mv: target 'sea.1080p-TT.mp4' i

我使用了'-print0'选项来处理带有空格的文件名,但出现了一个错误

#!/bin/bash
find /home/data -name '*QQ*' -print0 -exec bash -c ' mv $1 ${0/\-QQ/-TT}' {} \;
哪一部分错了


谢谢

您不需要
-print0
,因为您不需要将输出传输到其他程序

您只需要在bash命令中正确引用

/home/data/gone to sea.1080p-QQ.mp4mv: target 'sea.1080p-TT.mp4' is not a directory
只要文件名不包含双引号或
$
字符,就可以使用此选项

您还可以使用
rename
命令避免
bash-c

find /home/data -name '*-QQ*' -exec bash -c 'mv "$1" "${1/\-QQ/-TT}"' {} {} \;

这可能会有帮助:这里的
-print0
选项实际上没有完成任何事情;它实际上只是在之后打印带有空字节的文件名。它对
-exec
没有影响。您只能在连接到一个旨在解析空分隔文件名的程序时使用
-print0
,例如
xargs-0
。我遗漏了一些重要内容。非常感谢。我学到了一些东西。@ruakh
bash-c
需要使用
${1/-QQ/-TT}
替换当然,另一个解决方案是使用
rename
命令。
find /home/data -name '*-QQ*' -exec rename 's/-QQ/-TT/' {} +