将多个文件移动到多个到多个目录
Move multiple files to multiple to multiple directories
我有 5 个文件,名为 file1.txt、file2.txt ... file5.txt,我想将每个文件移动到名为 dir1、dir2 ... dir5 的相应目录中。
所以file1.txt被移动到dir1,file2.txt被移动到dir2等等。
有没有办法在命令行的一行中执行此操作,也许使用 mv
和 xargs
?
我只是建议 xargs
因为我非常喜欢这个 answer Robert Gamble 提供的关于如何将一个文件复制到多个目录的问题。
echo dir1 dir2 dir3 | xargs -n 1 cp file1
我个人更喜欢依赖于 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
另一种方法,如果它不一定是连续整数列表,并且 dir*
不一定已经存在。
for f in *.txt; do mkdir dir${f: -5:1}; mv $f dir${f: -5:1}/; done
使用 GNU Parallel 你会这样:
parallel mv {} {=s/file/dir/=} ::: *.txt
我有 5 个文件,名为 file1.txt、file2.txt ... file5.txt,我想将每个文件移动到名为 dir1、dir2 ... dir5 的相应目录中。
所以file1.txt被移动到dir1,file2.txt被移动到dir2等等。
有没有办法在命令行的一行中执行此操作,也许使用 mv
和 xargs
?
我只是建议 xargs
因为我非常喜欢这个 answer Robert Gamble 提供的关于如何将一个文件复制到多个目录的问题。
echo dir1 dir2 dir3 | xargs -n 1 cp file1
我个人更喜欢依赖于 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
另一种方法,如果它不一定是连续整数列表,并且 dir*
不一定已经存在。
for f in *.txt; do mkdir dir${f: -5:1}; mv $f dir${f: -5:1}/; done
使用 GNU Parallel 你会这样:
parallel mv {} {=s/file/dir/=} ::: *.txt