将文件从子文件夹移动到父文件夹

时间:2015-12-11 19:47:13

标签: shell directory mv

我从S3下载了很多文件,将它们全部转储到一个名为contracts的新文件夹中。现在,在合同中,每个文件都有自己的命名(作为数字)文件夹,即5566等。

查找脚本以获取所有这些子文件夹中的所有文件,将它们移动到父文件夹(/ contracts),然后删除那些空文件夹。

3 个答案:

答案 0 :(得分:2)

我会这样做(来自contracts之外):

mkdir contracts2 #create a sister folder
find contracts -type f -print0 | #find all files in contracts
    xargs -0 -I{} cp -l {} contracts2/ #hardlink them flatly to contracts2

现在,如果一切顺利(请查看tree contracts2),您可以 rm -rf contractsmv contracts2 contracts

这应该非常快(硬链接非常快,并且它可能只执行cp的一个实例)并且安全(在运行之前你不会丢失原始目录{{ 1}}就可以了。)

答案 1 :(得分:1)

yes | cp -a /contract/*/* /contract

/ contract表示您的合同目录位于/但您可以在任何地方更改路径,例如yes | cp -a /var/contract/*/* /var/contract

这是来自和路径。如果您想移动而不是复制,请注意将cp更改为mv。在您的情况下,这将有效yes | cp -a contracts/*/* contracts

答案 2 :(得分:1)

您可以使用findmv以及-exec选项移动所有文件:

find /path/to/contracts -type f -exec mv -i '{}' /path/to/contracts \;

通过向-i提供mv选项,它会在覆盖具有相同名称的文件之前提示。如果有许多文件具有相同的名称,您可能需要创建一个简短的脚本来动态重命名文件以避免用户交互。