如何在a.csv doc - macOS Terminal中基于文件名移动文件?

时间:2018-03-31 10:32:17

标签: macos terminal

终端noob需要一些帮助:)

  1. 我在.csv文件中有一个98行长的文件名列表。例如: name01; name03等。
  2. 我有一个外部硬盘驱动器,混乱文件中有很多文件 结构体。但是文件名是一致的,例如: name01_xy; name01_zq; name02_xyz等。
  3. 我想从外部硬盘复制每个文件和目录 驱动器以.csv文件中存储的文件名开头到我的 计算机。
  4. 所以基本上它是基于从eHDD到我的计算机的文本文件的搜索和复制。我想最简单的方法是终端命令。你有什么建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

任务可以分为三个:从文件中读取搜索条件;按标准查找文件;复制找到的文件。我们分别讨论每一个并将它们组合成一个单行的步骤:

.csv文件

中读取搜索条件

由于您的.csv文件几乎只是一个文本文件,每行有一个标准,因此非常简单:仅cat文件。

$ cat file.csv
bea001f001
bea003n001
bea007f005
bea008f006
bea009n003

查找文件

我们将使用find。示例:您有一个目录/Users/me/where/to/search,并希望查找名称以bea001f001开头的所有文件:

$ find /Users/me/where/to/search -type f -name "bea001f001*"

如果要查找以bea001f001结尾的所有文件,请将星形通配符(零或多)移动到搜索条件的开头:

$ find /Users/me/where/to/search -type f -name "*bea001f001"

现在您已经可以猜出包含名称bea001f001的所有文件的搜索条件如下:"*bea001f001*"

我们使用-type f告诉find我们只对查找文件而不是目录感兴趣。

结合阅读和发现

我们使用xargs将文件内容传递给find -name个参数:

$ cat file.csv | xargs -I [] find /Users/me/where/to/search -type f -name "[]*"
/Users/me/where/to/search/bea001f001_xy
/Users/me/where/to/search/bea001f001_xyz
/Users/me/where/to/search/bea009n003_zq

复制文件

我们使用cp。这非常简单:cp file target会将file复制到目录target(如果它是目录,或替换名为target的文件)。

完成单线

我们将结果从find传递给cp而不是通过管道传递,而是使用传递给-exec的{​​{1}}参数:

find