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

Move files from subfolders into parent folder

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

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

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

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

这是往返路径。如果您想移动而不是复制,请注意将 cp 更改为 mv。在您的情况下,这将起作用 yes | cp -a contracts/*/* contracts

我会做(在 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就可以了)。

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

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

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