我有两个文件名和目录名的文件。我想将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/