2015-12-11 277 views
0

我从S3下载了大量文件,将它们全部转储到名为contracts的新文件夹中。现在,在合同中,每一个文件是在它自己的命名(如数字)的文件夹,即5566将文件从子文件夹移动到父文件夹中

寻找一个脚本来采取所有这些子文件夹中的所有文件,将它们移动到父文件夹(/合同),然后删除空的文件夹。

回答

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

/contract表示您的合同目录位于/但您可以更改所需的路径,例如,

这是从和到路径。如果您想移动而不是复制,请注意将cp更改为mv。你的情况,这将工作yes | cp -a contracts/*/* contracts

+0

谢谢。但我得到'cp:/ contracts/*/*:没有这样的文件或目录' –

+0

编辑:它工作删除反斜杠,如:'是| CP -A合约/ */*合约“。请编辑您的答案,我将标记为正确的答案。谢谢! –

+0

我编辑过。请标记我的回答 – Ghayel

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的一个实例)并且安全(直到您运行rm -rf之前,您不会丢失原始目录)。

1

你可以用-exec选项使用findmv将所有文件一起:

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

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

相关问题