【问题标题】:Mac terminal: Deleting files from a folder whose name is equal to files in another folderMac终端:从名称与另一个文件夹中的文件相同的文件夹中删除文件
【发布时间】:2014-06-03 01:14:13
【问题描述】:

有问题的两个目录的布局是:

folder1
-file1
-file2

folder2
-file1
-file2

目录中的文件名称相同。我尝试使用rm 以编程方式删除文件夹 2 中的文件:

for f in /Users/michelegiarratana/1/*; do rm /Users/michelegiarratana/2/$f

但这不起作用。 $f 是完整路径吗?我如何获得名称?

谢谢

【问题讨论】:

  • 使用basename:for f in /path/to/folder/1/*; do rm "/path/to/folder/2/$(basename "${f}")"; done
  • 它仍然看到我 rm: /Users/michelegiarratana/2/*: 没有这样的文件或目录
  • 这可能意味着/Users/michelegiarratana/1/中没有文件。
  • 不,两者的文件相同
  • * 字符被 bash 扩展为“目录中的所有文件”。如果 /Users/michelegiarrantana/ 1 / 下有文件,则 * 将被这些文件名替换。但是,您的错误消息是rm: /Users/michelegiarratana/2/*: No such file or directory。当没有文件可供* 展开时,就会发生这种情况。在这种情况下,它被视为文字 * 字符,即。 basename $f == '*'。所以你实际上是在运行rm /Users/michelegiarratana/2/*

标签: macos bash shell terminal


【解决方案1】:

正如 savanto 在他的评论中所说——是的,你是对的,$f 这是完整的文件路径。要解决这个问题,您应该使用 basename 内置函数,它只提取文件名。在您的示例中:

for f in /Users/michelegiarratana/1/*; do rm /Users/michelegiarratana/2/$(basename $f); done

此外,您的问题更广泛地适用于 bash shell,而不仅仅是 OS X 终端,将来,您应该尝试在 bash 标签中寻找答案,因为其中许多对您有用。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-02-15
  • 2020-09-26
  • 2022-08-21
  • 2013-04-12
  • 1970-01-01
  • 2014-04-06
  • 2018-09-03
  • 1970-01-01
相关资源
最近更新 更多