将多个文件移动到多个目录中

3
我有5个文件,分别为file1.txt,file2.txt ... file5.txt,我想将每个文件移动到对应的目录dir1,dir2 ... dir5中。
因此,file1.txt被移动到dir1,file2.txt被移动到dir2,依此类推。
有没有一种方法可以在命令行中使用mv和xargs一次性完成这个任务呢?
我之所以建议使用xargs,是因为我很喜欢Robert Gamble提供的answer,其中回答了一个关于如何将一个文件复制到多个目录的问题。 echo dir1 dir2 dir3 | xargs -n 1 cp file1
3个回答

0

使用GNU Parallel,您可以这样做:

parallel mv {} {=s/file/dir/=} ::: *.txt

0

如果不一定是连续整数列表,且dir*不存在,你可以采用另一种方法。

for f in *.txt; do mkdir dir${f: -5:1}; mv $f dir${f: -5:1}/; done

0
我个人更喜欢依赖于 for 循环的解决方案,例如:
for n in {1..5}; do echo mv -- "file$n.txt" "dir$n/"; done
#                   ^^^^ remove that

这可以使用xargs完成,但我认为解决方案不够优雅:

seq 1 5 | xargs -n1 -I{} echo mv -- "file{}.txt" "dir{}/"
#                        ^^^^ remove that

可以的,谢谢!我没有想到使用 echo 来查看实际执行的命令,然后再真正执行 - 我会记住这一点的。有没有办法在文件名为 fileA、fileB 等的文件上使用您的解决方案? - Dónal Ó Loingsigh
只需执行 for n in A B ...; do ...。另外,echo 是为了帮助我调试它而留下的。我不小心把它留在那里了 :-)。我很高兴它有所帮助。 - redneb
感谢增加 xargs。关于文件A、文件B等的问题,我无法看出如何提供命令以使用2个输入。执行以下语句 for n in {A..E}; do echo mv -- "file$n.txt" "dir$n"; done 会将 fileA.txt 移动到 dirA ,以此类推,但如果我想将 fileA.txt 移动到 dir1 - 这是否可能还是一个完全不同的问题? - Dónal Ó Loingsigh
对此,我会说这是一个不同的问题。你可能可以使用类似于 mv -- "file$n.txt" "dir$(($(LC_CTYPE=C printf '%d' "'$n")-64))" 的东西来完成,其中 $n 是大写字母,但要求并不完全清楚。 - redneb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接