【问题标题】:Move multiple files to multiple to multiple directories将多个文件移动到多个到多个目录
【发布时间】:2017-01-14 05:44:29
【问题描述】:

我有 5 个名为 file1.txt、file2.txt ... file5.txt 的文件,我想将每个文件移动到名为 dir1、dir2 ... dir5 的相应目录中。

所以 file1.txt 被移动到 dir1,file2.txt 被移动到 dir2 等等。

有没有办法在命令行的一行中执行此操作,也许使用mvxargs

我只是建议 xargs,因为我非常喜欢 Robert Gamble 提供的 answer 问题,询问如何将一个文件复制到多个目录。

echo dir1 dir2 dir3 | xargs -n 1 cp file1

【问题讨论】:

    标签: linux xargs mv


    【解决方案1】:

    我个人更喜欢依赖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 等上使用您的解决方案?
    • 只要for n in A B ...; do ...。此外,echo 旨在帮助我调试它。我不小心把它留在那里:-)。我很高兴它有所帮助。
    • 感谢xargs 添加。关于fileA、fileB等问题。我看不到如何为命令提供 2 个输入。以下for n in {A..E}; do echo mv -- "file$n.txt" "dir$n"; done 将 mv fileA.txt 移动到 dirA 等等,但是如果我想将 fileA.txt 移动到 dir1 - 这可能还是完全不同的问题?
    • 对此我想说这是一个不同的问题。您可能可以使用 mv -- "file$n.txt" "dir$(($(LC_CTYPE=C printf '%d' "'$n")-64))" 之类的东西,其中 $n 是大写字母,但要求并不完全清楚。
    【解决方案2】:

    如果它不一定是连续整数的列表,并且dir* 不一定已经存在,则可以使用另一种方法。

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

    【讨论】:

      【解决方案3】:

      使用 GNU Parallel 你会这样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2016-10-09
        • 2015-10-15
        • 1970-01-01
        相关资源
        最近更新 更多