2

我正在尝试重命名文件,例如screen-0001.tif使用此 SO 问题0001.tif中的方法:

for file in *.tif
do
  echo mv "$file" "${screen-/file}"
done

无法改变任何东西。感谢我出错的地方。

4

2 回答 2

3

恕我直言,更简单的方法是使用 Perl 的rename脚本。我在这里使用它,--dry-run所以它只是告诉你它会做什么,而不是实际做任何事情。--dry-run如果/当您对命令感到满意时,您只需删除:

rename --dry-run 's/screen-//' *tif

'screen-001.tif' would be renamed to '001.tif'
'screen-002.tif' would be renamed to '002.tif'
'screen-003.tif' would be renamed to '003.tif'
'screen-004.tif' would be renamed to '004.tif'

它还有一个额外的好处是它不会覆盖任何碰巧同名的文件。所以,如果你有文件:

screen-001.tif
0screen-01.tif

你这样做了,你会得到:

rename 's/screen-//' *tif
'screen-001.tif' not renamed: '001.tif' already exists

rename使用Homebrew很容易安装,使用:

brew install rename
于 2016-06-03T08:26:19.920 回答
1

两件事情:

  1. 您正在回显命令而不是实际执行它们。当我进行大量重命名以确保命令正常工作时,我会这样做。我可以将输出重定向到一个文件,然后将该文件用作 shell 脚本。
  2. 替换是错误的。有两种方法:
    1. 最左边的过滤器${file#screen-}
    2. 替代:${file/screen/}

环境变量的名称总是放在第一位。然后是模式类型,然后是模式

这是我将如何做到这一点:

$ for file in *.tif
> do
>   echo "mv '$file' '${file#screen-}'"
> done | tee mymove.sh   # Build a shell script 
$ vi mymove.sh           # Examine the shell script and make sure everything is correct
$ bash mymove.sh         # If all is good, execute the shell script.
于 2013-08-15T16:23:29.363 回答