mv 没有这样的文件或目录?重命名多个目录中的文件

mv 没有这样的文件或目录?重命名多个目录中的文件

这部分是因为我对 BASH 的了解非常肤浅。

这是脚本:

eighteen=(2018*/*)
newe=`echo "$eighteen" | sed -e 's/\(-\)*$//g'`

while read f <&3 && read nf <&4; do     
    mv -v "${f}" "${nf}"
    break
done 3<"$eighteen" 4<"$newe"

我试图弥补我编写的糟糕脚本,并删除-多个子文件夹中每个文件名末尾的符号。

和我得到的错误:./cleanup.sh: line 16: 2018-08-13/untitled-102.arw: No such file or directory

值得注意的是,该错误不是来自mvline,而是来自 this: done 3<"$eighteen" 4<"$newe"

我从 StackExchange 上的答案中复制了 while 循环。快餐通常不利于消化,快速解决方案-为了理解,请帮助我理解。请给我一个关于如何调用前面提到的替换的提示4<"$newe" nf <&4,我应该如何搜索以了解更多信息。它是否应用于while语句上下文之外?

答案1

您似乎使用了一个简单的有缺陷的 shell 脚本,您可以在其中使用适当的工具,保留您的正则表达式:

rename -n 's/-*$//' 2018*/*

-n当输出看起来不错才能真正重命名时,请删除开关。

男人重命名

警告 还有其他同名的工具可能能够也可能无法做到这一点,所以要小心。

作为包一部分的重命名命令util-linux不会。

如果您运行以下命令:

$ rename

你看perlexpr,那么这似乎是正确的工具 =)

如果不是,则将其设为默认值(通常已经是这种情况)Debian并衍生如下Ubuntu

$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

对于 archlinux:

pacman -S perl-rename

对于 RedHat 系列发行版:

yum install prename

'prename' 包位于EPEL存储库。


对于 Gentoo:

emerge dev-perl/rename

对于 *BSD:

pkg install gprename

或者p5-File-Rename


对于 Mac 用户:

brew install rename

如果您的其他发行版没有此命令,请搜索您的软件包管理器来安装它或手动做(没有部门...)


这个工具最初是由 Perl 之父 Larry Wall 编写的。

相关内容