【问题标题】:Map mv command to each row of file and directory names lists将 mv 命令映射到每行文件和目录名称列表
【发布时间】:2020-05-20 15:08:19
【问题描述】:

我有两个文件名和目录名。我想将 mv 命令从文件名文件的每一行映射到目录名文件中的每一行。文件很小。

如果有帮助,我可以按顺序命名文件(例如 f1、f2、f3...f1000)。有没有办法循环读取一个文件和一个目录?

可以有 3 个用例:一个文件到多个目录,多个文件到一个目录,多个文件到多个目录(在我的例子中,1 个文件/行 = 1 个目录/行)。我的用例与最后一个有关。我已经看到 xargs 在某些用例中使用,但我不确定如何针对我的用例进行修改。

以下问题无济于事:Moving large number of files

【问题讨论】:

  • 一个想法:使用mapfile 将每个文件加载到一个数组中。从 0 迭代到 N 并将其用作两个数组的索引,以获得一对与 mv 一起使用的名称。
  • 类似paste <(sed 's/^/mv /' files) dirs | bash?如果必须引用任何文件或目录名称,则需要进行一些调整。如果您显示一些示例输入,答案可能会更具体。

标签: bash shell terminal scripting


【解决方案1】:

假设您有一个名为 files 的文件,其中包含文件名,每个文件名都在一个新行中,以及一个名为 dirs 的文件,其中每个目录都在一个新行中,两者都有相同数量的条目例如:

文件

file1
file2
file3

目录

dir1
dir2
dir3

然后将file1移动到dir1,file2移动到dir2等等可以使用命令:

paste dirs files | xargs -n2 mv -t

paste 连接两个文件中的行,然后xargs 接受两个参数并使用它们调用mv 命令。 -t 选项选择目标目录。以下是来自mv 文档的相关片段。

mv [OPTION]... -t DIRECTORY SOURCE...

-t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 2020-07-28
    • 2013-08-27
    • 2021-12-29
    • 2020-08-10
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多