如何递归移动嵌套文件

问题描述 投票:0回答:1

我有一个文件夹,

app, which is supposed to have 
import
and
export`,如下所示:

$ tree
app
├── export
│   ├── some-unique-filename
│   ├── another-unique-filename
│   └── ...
└── import
    ├── some-unique-filename
    ├── another-unique-filename
    └── ...

但是,由于 rsync 脚本错误(现已更正),我们最终导致

app
文件夹被复制到自身中,可能复制了数百次!

所以现在我们有这个:

$ tree
app
├── app
│   ├── app
│   │   └── ... etc. 
│   ├── export
│   │   └── another-unique-filename
│   └── import
│       └── another-unique-filename
├── export
│   └── some-unique-filename
└── import
    └── some-unique-filename

如何修复当前的嵌套文件夹结构

linux rsync mv
1个回答
1
投票

像这样的脚本应该从根本上做到这一点:

mkdir -p new/export
mkdir -p new/import

mv app/**/export/* new/export
mv app/**/import/* new/import

双星匹配零个或多个目录和子目录。,为您处理递归源文件。

处理深度嵌套的文件夹

如果如您所说,有数百个文件夹可能会出错,在这种情况下,替代方法是使用

find
exec
代替:

mkdir -p new/export
mkdir -p new/import

find app -type f -path '*/export/*' -exec mv {} $PWD/new/export/ \;
find app -type f -path '*/import/*' -exec mv {} $PWD/new/import/ \;

这会在顶级

app
文件夹下递归查找文件,并将它们移动到新建/导入(使用
$PWD
获取绝对路径)。

清洁

一旦您对结果感到满意 - 清理现在为空的文件夹:

rm -rf app
mv new app
© www.soinside.com 2019 - 2024. All rights reserved.