linux - 递归地重命名文件并删除一个字符

标签 linux bash rename xargs

有些文件名包含'?' 如您所知,Windows 对此类字符有问题。我想使用 xarg 递归重命名文件夹中的所有文件。例如

09 - grand hall?_10.mp3

应该是

09 - grand hall_10.mp3

最佳答案

for file in $(find <em>folder</em> -name '*.mp3'); do<br/>   mv -v "$file" $(echo "$file" | tr ? _);<br/> done


上面有空格问题;这样更好:

find <em>folder</em> -name '*.mp3' -exec echo "'{}'" \; |<br/>   while read file; do<br/>     echo -n "mv -v $file " && echo $file | tr ? _;<br/> done | sh

想法是找到所有文件,然后用引号将它们回显。将输出通过管道传输到 while构造 mv 的循环对每个文件执行命令,然后将 那个 通过管道传输到一个新的 shell 中。

丑陋,但如果你不喜欢这个答案,你就不应该问这个问题。 :-)

关于linux - 递归地重命名文件并删除一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162537/

相关文章:

linux - 如何使用 sftp get 命令重命名文件

python - 将模板文件复制到多个目录,根据目录查询模板文件重命名

unix - 如何使用mv命令在UNIX中重命名多个文件?

使用 Linux C 程序检查是否存在并读取/处理文件

linux - 取消 shell 脚本中的 sudo 提示

java - 默认目录必须是绝对目录

ImageMagick 裁剪巨大的图像

linux - 在 Bash 中将一个目录中的所有文件连接成一个文件,按修改日期排序

linux - 如何从命令输出中删除空格/制表符

bash - 什么是 : division by 0 (error token is "etc/shadow ") error?