如何按用户定义重命名多个文件夹/文件。
举个例子,我有多个文件夹,如 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