【问题标题】:Unix Shell command to copy all files inside current directory to subdirectoryUnix Shell命令将当前目录中的所有文件复制到子目录
【发布时间】:2016-07-04 21:45:31
【问题描述】:

我想将当前目录中的所有文件复制到一个新的子目录中。这个unix命令是什么?

【问题讨论】:

    标签: shell unix command-line terminal


    【解决方案1】:

    您可以使用cp -R 命令。使用-R 标记它递归地复制目录。

    例如:

    cp -R directory1/ directory2/
    

    将整个directory1 复制到directory2

    【讨论】:

    • 好吧。我想复制当前目录中的文件。 cp -R * directory2/ 不起作用。
    • 所以你需要使用 dot 而不是 asterisk,像这样:cp -R . directory2/
    • 不起作用,伙计。这最终将递归地复制目录2,包括新内容。进入一种无限循环。一旦检测到无穷大,哪个 shell 会杀死。
    【解决方案2】:

    要复制所有“文件”,您需要排除其他子目录的副本。你可以用一个短循环和复合命令来做到这一点,例如

    for i in *; do [ -f "$i" ] && cp -a "$i" directoryname; done
    

    有几种方法可以做到这一点。让我知道这是否会给您带来任何麻烦。

    由于您是 shell 编程的新手,compound-command 只是两个命令(或更多)与&&(这意味着如果第一个成功则执行第二个)和@ 987654323@(这意味着只有在第一个失败时才执行第二个)。所以在上面,循环只是做了以下事情:

    for i in *; do                                 # for each linux-file in dir
        [ -f "$i" ] && cp -a "$i" directoryname    # test if plain file && copy
    done
    

    【讨论】:

    • 太棒了。效果很好。目录应该存在才能运行命令。
    • 您可以随时添加路径信息以防止必须先更改目录。但是,熟悉处理目录中的文件,然后我们将处理文件系统中远程路径位置的文件。很高兴它为你工作:)
    【解决方案3】:

    替换子目录名:

    $cp -R * 子目录名/

    【讨论】:

    • 对不起,它不起作用。您的 shell 命令将在子目录名中创建很多目录子目录名。