递归复制并重命名以用下划线替换空格

递归复制并重命名以用下划线替换空格

我有一个目录,里面有 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

如果您的目录名包含空格,并且您想要复制这些空格,则必须更好地指定您想要复制的内容:原始文件和新文件,只有新文件,可能还有其他没有空格的文件......

相关内容