gpt4 book ai didi

macos - 如何根据 a.csv 文档中的文件名移动文件 - macOS 终端?

转载 作者:行者123 更新时间:2023-12-04 14:24:04 24 4
gpt4 key购买 nike

终端菜鸟需要一点帮助:)

  1. 我在 .csv 文件中有一个 98 行长的文件名列表。例如:姓名01; name03等
  2. 我有一个外置硬盘,里面有很多乱七八糟的文件结构体。但是文件名是一致的,比如:名字01_xy;姓名01_zq; name02_xyz等
  3. 我想从外部硬盘复制每个文件和目录以存储在 .csv 文件中的文件名开头的驱动器到我的计算机。

所以基本上它是基于从 eHDD 到我的计算机的文本文件的搜索和复制。我想最简单的方法是使用终端命令。你有什么建议吗?提前致谢!

最佳答案

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

.csv文件中读取搜索条件

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

$ cat file.csv
bea001f001
bea003n001
bea007f005
bea008f006
bea009n003

查找文件

我们将使用查找。示例:您有一个目录 /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,而是使用传递给 find -exec 参数:

$ cat file.csv | xargs -I [] find /Users/me/where/to/search -type f -name "[]*"  -exec cp {} /Users/me/where/to/copy \;

关于macos - 如何根据 a.csv 文档中的文件名移动文件 - macOS 终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com