unix 如何解压文件夹一个目录级?

jgwigjjp  于 2023-08-04  发布在  Unix
关注(0)|答案(2)|浏览(124)

我正在寻找一个shell命令(我在MacOS bash上),可以为我做这项工作:
所以我有一个这样结构的文件夹:

.
├── Erie
│   └── archive
│       ├── 001
│       ├── 002
│       ├── 003
│       └── 004
│           ├── 0041
│           ├── 0042
│           └── 0043
└── SB
    └── archive
        ├── 002
        ├── 003
        └── 004

字符串
从本质上讲,我想摆脱的水平“档案”,并重新组织的文件夹

.
├── Erie
│    ├── 001
│    ├── 002
│    ├── 003
│    └── 004
│        ├── 0041
│        ├── 0042
│        └── 0043
└── SB
    ├── 001
    ├── 002
    └── 003


我尝试过的:

cd Erie
find . -depth 2 -type d 
# outputs:
#./archive/001
#./archive/003
#./archive/004
#./archive/002


然后我想附加命令将这些目录上移一级。我试着查找-execxargs函数,但我无法解决这个问题:

方法一:

find . -depth 2 -type d | xargs mv .

# gives me an error: 
# mv: rename . to ./archive/002/.: Invalid argument

# this also generates a weird folder structure:
.
└── archive
    └── 002
        ├── 001
        ├── 003
        └── 004
            ├── 0041
            ├── 0042
            └── 0043

方法二:

find . -depth 2 -type d -exec mv {} . ;

# This give me an error as well:
# find: -exec: no terminating ";" or "+"

2vuwiymt

2vuwiymt1#

这里有一个简单的建议:

for Dir in Erie SB
do find "$Dir"/archive -mindepth 1 -maxdepth 1 -exec mv -v '{}' "$Dir" ';'
rmdir -v "$Dir"/archive
done

字符串
希望能帮上忙。

nafvub8i

nafvub8i2#

如果不使用find

for d in Erie SB; do mv $d/archive/* $d/; rmdir $d/archive; done

字符串

相关问题