这是作业!
我试图用yay
目录中的下划线替换文件名中的所有空格。它要求我使用命令 xargs 和 sh,而不使用 $(command)。我尝试使用命令行为,但它不断显示此消息:
sh: 1: Bad substitution
有人可以解释为什么这个消息不断弹出吗?
以下是我厌倦使用的命令:
find yay -type f -print0 | xargs -0 -I {} sh -c 'newname="${1// /_}"; mv "$1" "$newname"' sh
和
find yay -type f -exec sh -c 'mv "$1" "${1// /_}"' _ {} \;
答案1
shellsh
不理解/
替换。 (不过,它确实理解%
and 和#
。)您需要一个 shell,例如bash
:
find yay -type f -exec bash -c 'mv -- "$1" "${1// /_}"' _ {} \;
您可以通过减少 shell 的调用次数(当前每个文件一次)来更有效地编写此文件,并且仅在目标尚不存在时才重命名文件:
find yay -type f -name '* *' -exec bash -c 'for f in "$@"; do g=${f// /_}; [ ! -e "$g" ] && mv -f -- "$f" "$g"; done' _ {} +
在测试时,mv
加上前缀echo
,您将得到一个打印输出(近似值),而无需真正采取任何操作。