使用 shell 脚本重命名多个文件夹而不匹配模式

使用 shell 脚本重命名多个文件夹而不匹配模式

如何按用户定义重命名多个文件夹/文件。

举个例子,我有多个文件夹,如 krish、moorthy、ravi、robert 等。

我想将所有这些目录重命名为 script_1、script_2、script_3 等

我尝试了下面的脚本,但它没有产生输出

for i in * do mv $* $script_'$i' done

执行时它说无法移动,无法统计*

请帮助我解决这个问题。

答案1

你的脚本有很多错误,很难知道从哪里开始。

首先,语法需要行尾标记:

for i in *; do mv $* $script_'$i'; done

现在mv参数1需要是当前文件的名称:

for i in *; do mv $i $script_'$i'; done

接下来,mv参数 2 有三个错误($script_扩展了不存在的变量script_;引号使其'$i'成为文字;并且您需要第二个带有计数的变量来扩展为您想要的名称),因此您需要类似以下的内容:

n=1; for i in *; do mv $i script_$n; ((++n)); done

只要文件名中没有空格,并且当前目录中没有非目录文件,此方法就可以奏效。最后我们得到:

n=1; for i in *; do if [ -d "$i" ]; then mv "$i" script_$n; ((++n)); fi; done

答案2

perl-rename非常适合于此:

$ cd -- "$(mktemp --directory)"
$ mkdir foo bar baz
$ perl-rename --dry-run --verbose 's/.*/sprintf "script_%04d", ++$main::Mad/e' ./*/
./bar/ -> script_0001
./baz/ -> script_0002
./foo/ -> script_0003

相关内容