将 mv 命令映射到文件和目录名称列表的每一行

将 mv 命令映射到文件和目录名称列表的每一行

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

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

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

以下问题没有帮助:https://stackoverflow.com/questions/11942422/moving-large-number-of-files

答案1

给定

$ head files dirs
==> files <==
foo
bar
baz

==> dirs <==
foodir
bardir
bazdir

然后使用足够新的 bash 版本

$ while IFS= read -r -u3 f && IFS= read -r -u4 d; do 
    echo mv "$f" "$d/"
  done 3<files 4<dirs
mv foo foodir/
mv bar bardir/
mv baz bazdir/

或使用 GNUparallel

$ parallel --xapply echo mv {1} {2}/ :::: files :::: dirs
mv foo foodir/
mv bar bardir/
mv baz bazdir/

相关内容