我的桌面上有一个名为“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 & \1\2/' | 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 & \1\2/' | sh
但这与No such file or directory
?
我试图明确文件的位置,例如...
ls File-* | sed '' 's/\(File-[^-]\)-\(.+\)/mv ~\/Desktop\/Images\/& ~/Desktop\/Images\/\1\2/' | sh
...注意我不得不逃避正斜杠~\/Desktop\/Images\/
,但这仍然没有用。
我还安装了使用 Homebrew 的 GNU 版本,sed
但它也以类似的方式出错gsed: can't read s/\(Vim-[^-]\)-\(.+\)/mv & \1\2/: No such file or directory
我对如何让它发挥作用有点不知所措。
我不想求助于编写 bash/zsh 脚本或 Ruby 脚本。
您能给我的任何帮助将不胜感激。