Bash 一次性批量重命名文件和文件夹
我得到了关于以下问题的帮助: 这是如何重命名组中特定文件的一个很好的示例,但我想知道是否有类似的脚本可用于执行以下操作:Bash 一次性批量重命名文件和文件夹,bash,batch-rename,Bash,Batch Rename,我得到了关于以下问题的帮助: 这是如何重命名组中特定文件的一个很好的示例,但我想知道是否有类似的脚本可用于执行以下操作: 我在根目录中有一组嵌套的文件夹和文件,其中包含[myprefix_foldername]和[myprefix_filename.ext] 我想将所有文件夹和文件重命名为[foldername]和[filename.ext] 我可以使用类似于上面帖子的方法吗 谢谢! jml是的,很容易,有 这将为您提供rootDir中以myprefix\uu开头的所有文件和文件夹的列表。从这
rootDir
中以myprefix\uu
开头的所有文件和文件夹的列表。从这里,我们可以快速跳转到批量重命名:
find rootDir -name "myprefix_*" | while read f
do
echo "Moving $f to ${f/myprefix_/}"
mv "$f" "${f/myprefix_/}"
done
编辑:根据添加的IFS
编辑2:如果在阅读时删除了,以支持
编辑3:正如bos指出的那样,如果您的Bash版本仍然不喜欢它,您可能需要在读取f
时将更改为而读取-d$'\n'f
。是的,非常容易
这将为您提供rootDir
中以myprefix\uu
开头的所有文件和文件夹的列表。从这里,我们可以快速跳转到批量重命名:
find rootDir -name "myprefix_*" | while read f
do
echo "Moving $f to ${f/myprefix_/}"
mv "$f" "${f/myprefix_/}"
done
编辑:根据添加的IFS
编辑2:如果在阅读时删除了,以支持
编辑3:正如bos所指出的,如果您的Bash版本仍然不喜欢它,您可能需要将读取f时的更改为读取-d$'\n'f时的。如果文件夹名称中有空格怎么办?在这种情况下,它似乎失败了。。。如果你需要更多的细节,请告诉我。我不明白为什么会失败。你记得在$f
和${f/myprefix./}
周围加引号吗?让我看看它是如何失败的。。。。。。。。好的,是的,for
命令正在分割充满空间的文件名。我能找到的最简单的解决方案是将IFS=“\n”
放在脚本中,如图所示:@jml-我想出了一种稍微不那么混乱的方法,它不需要IFS
。请参阅编辑后的答案。这里我们不知道的是jml bash的版本。较旧的bash具有空间作为“读取”的分隔符,而较新的bash具有\n。如果jml使用旧版本,请将读取f
时的更改为读取-d'\n'f
时的。如果文件夹名称中有空格怎么办?在这种情况下,它似乎失败了。。。如果你需要更多的细节,请告诉我。我不明白为什么会失败。你记得在$f
和${f/myprefix./}
周围加引号吗?让我看看它是如何失败的。。。。。。。。好的,是的,for
命令正在分割充满空间的文件名。我能找到的最简单的解决方案是将IFS=“\n”
放在脚本中,如图所示:@jml-我想出了一种稍微不那么混乱的方法,它不需要IFS
。请参阅编辑后的答案。这里我们不知道的是jml bash的版本。较旧的bash具有空间作为“读取”的分隔符,而较新的bash具有\n。如果jml使用旧版本,请将读取f
时的更改为读取-d'\n'f
时的。