如何在Mac OSX上使用Zsh shell和`sed`命令重命名文件
我的桌面上有一个名为“Images”的文件夹,该文件夹内有3个图像...
File-A-B.gif
File-C-D.gif
File-E-F.gif
...我想重命名命令行中的文件,以便删除第二个连字符/短划线。 所以结果会是这样命名的文件...
File-AB.gif
File-CD.gif
File-EF.gif
...我正在使用通过管道传递给对方的命令组合,但没有太多的运气让他们工作。
最初我有ls File-* | sed 's/(File-[^-])-(.+)/mv & 12/' | sh
ls File-* | sed 's/(File-[^-])-(.+)/mv & 12/' | sh
这个命令的分解是......
File-
sed
sed
来捕获名称的不同部分 File-A
和B.gif
sed
我们用移动命令替换匹配的文件名,并有效地告诉它将原始文件重命名为由我们捕获的两部分数据组成的文件 sh
我得到的最初错误是一个权限错误。 我不确定为什么我有'读写'权限访问这些文件。
要解决这个问题,我需要chmod 777
每个文件。
这导致了一个新的错误,它cannot execute binary file
。
要解决该错误,我看到了这篇文章:http://blog.mpdaugherty.com/2010/05/27/difference-with-sed-in-place-editing-on-mac-os-x-vs-linux/这表明增加了一对额外的单引号。 这个工程的原因(显然)是因为sed
会出错,因为它不知道要使用什么文件扩展名,但是把一个空字符串中和这个错误(注意:我的理解是你还需要使用-i
标志 - 我没有使用 - 但这样做导致了一个不同的错误,所以我废除了,只是用单引号来避免我得到的二进制文件错误)。
所以现在我有ls File-* | sed '' 's/(File-[^-])-(.+)/mv & 12/' | sh
ls File-* | sed '' 's/(File-[^-])-(.+)/mv & 12/' | sh
但是,这种错误与No such file or directory
?
我试图明确文件的位置,例如...
ls File-* | sed '' 's/(File-[^-])-(.+)/mv ~/Desktop/Images/& ~/Desktop/Images/12/' | sh
...注意我必须避开正斜线~/Desktop/Images/
但这仍然不起作用。
我也使用Homebrew安装了sed
的GNU版本,但它也与gsed: can't read s/(Vim-[^-])-(.+)/mv & 12/: No such file or directory
类似的gsed: can't read s/(Vim-[^-])-(.+)/mv & 12/: No such file or directory
我对如何让这个工作起作用感到有点不知所措。
我不想诉诸写一个bash / zsh脚本或Ruby脚本。
任何帮助,你可以给我将不胜感激。
以下内容适用于您:
ls File-* | sed 's/(.*)-(.*)/mv & 12/' | sh
你尝试过什么
ls File-* | sed '' 's/(File-[^-])-(.+)/mv & 12/' | sh
非常接近。 他说:
ls File-* | sed '' 's/(File-[^-]*)-(.*)/mv & 12/' | sh
反而会工作。
如果您使用的是zsh
,则不需要使用sed
:有一个名为zmv
的zsh模块,它可以非常简单地实现:
$ ls -F -G
File-A-B.gif File-C-D.gif File-E-F.gif
$ zmv -n 'File-(*)-(*).gif' 'File-${1}${2}.gif'
mv -- File-A-B.gif File-AB.gif
mv -- File-C-D.gif File-CD.gif
mv -- File-E-F.gif File-EF.gif
注意:忽略-n
让它实际运行。
它通过匹配括号内的东西来工作。 在这种情况下: File-(*)-(*).gif
将与File-AB.gif
匹配,并保存A
和B
以便稍后参考。 然后,我们将刚刚匹配的文件移动到一个新的文件名中,省略两个字母之间的连字符并使用引用插入字母: File-${1}${2}.gif
。
它是一个相当强大的小模块,只要你给它两个正则表达式:一个匹配要重命名的文件,另一个匹配重命名的文件名。
链接地址: http://www.djcxy.com/p/78053.html上一篇: How to rename files using Zsh shell and `sed` command on Mac OSX
下一篇: R string *.txt' even when top dir doesn't have a .txt file