我有一个目录,里面有 400 个子目录,每个子目录包含数百个文件,其中许多文件的文件名都包含空格。我需要复制所有文件名中带有空格的文件,这样就会产生两个文件副本,一个带有空格,另一个用下划线替换空格。我看到很多代码都接近这个效果,但没有一个可以递归复制、重命名和替换空格。有什么建议吗?谢谢……RWLinux 使用参数和空格重命名? Linux 使用参数和空格重命名?
答案1
但这并不是太难:
for i in "$(find . -type f -name '* *' -print)"; do cp "$i" $(echo $i | sed 's/ /_/g'); done
这假设你的目录名不是包含空格。如果包含空格,则以下 bash 脚本将起作用:
#!/bin/bash
TGT=/path/to/targt/directory
LIST="$(find $TGT -type f -name '* *' -print)"
for i in $LIST; do
dirpath=${i%/*}
base=base=${i##*/}
newbase=$(echo "base" | sed 's/ /_/g')
cp "$i" $dirpath/$newbase
done
如果您的目录名包含空格,并且您想要复制这些空格,则必须更好地指定您想要复制的内容:原始文件和新文件,只有新文件,可能还有其他没有空格的文件......