我正在尝试将嵌套在子目录中的文件移动到一个级别。我在os x终端,并且是bash的新手。我很确定这很简单,我只是不知道该怎么做。
我想更改一个如下所示的文件结构:
~/container
/1-A
LEVEL 1 - 000.jpg
LEVEL 1 - 001.jpg
LEVEL 1 - 002.jpg
/1-B
/2-A
LEVEL 2 - 007.jpg
LEVEL 2 - 008.jpg
LEVEL 2 - 009.jpg
/1-C
LEVEL 1 - 003.jpg
LEVEL 1 - 004.jpg
LEVEL 1 - 005.jpg
LEVEL 1 - 006.jpg
/1-D
/2-C
LEVEL 2 - 010.jpg
LEVEL 2 - 011.jpg
LEVEL 2 - 012.jpg
LEVEL 2 - 013.jpg
LEVEL 2 - 014.jpg
/1-E
LEVEL 1 - 015.jpg
LEVEL 1 - 016.jpg
LEVEL 1 - 017.jpg
/1-F
/2-B
/3-A
LEVEL 3 - 018.jpg
LEVEL 3 - 019.jpg
LEVEL 3 - 020.jpg
LEVEL 3 - 021.jpg
看起来像这样:
~/container
/1-A
LEVEL 1 - 000.jpg
LEVEL 1 - 001.jpg
LEVEL 1 - 002.jpg
/1-B
LEVEL 2 - 007.jpg
LEVEL 2 - 008.jpg
LEVEL 2 - 009.jpg
/2-A
/1-C
LEVEL 1 - 003.jpg
LEVEL 1 - 004.jpg
LEVEL 1 - 005.jpg
LEVEL 1 - 006.jpg
/1-D
LEVEL 2 - 010.jpg
LEVEL 2 - 011.jpg
LEVEL 2 - 012.jpg
LEVEL 2 - 013.jpg
LEVEL 2 - 014.jpg
/2-C
/1-E
LEVEL 1 - 015.jpg
LEVEL 1 - 016.jpg
LEVEL 1 - 017.jpg
/1-F
/2-B
LEVEL 3 - 018.jpg
LEVEL 3 - 019.jpg
LEVEL 3 - 020.jpg
LEVEL 3 - 021.jpg
/3-A
我试过了:
find ~/container -mindepth 3 -type f -exec mv {} . \;
和
find ~/container -mindepth 3 -type f -exec mv {} .. \;
但是这些文件相对于根目录移动文件,而不是文件本身所在的目录。换句话说,它们将文件移动得太远了。我希望他们完全向上移动一级,但是他们要先深入嵌套。
任何人都可以帮忙吗?
答案 0 :(得分:4)
这可以解决您的问题:
find ~/container -mindepth 3 -type f -execdir mv "{}" ./.. \;
描述:
find ~/container
在此文件夹中搜索
-mindepth 3
仅显示3个目录的文件
-type f
仅显示文件(不是目录)
-execdir
对其目录中的每个文件执行以下命令
mv "{}" ./..
将文件移到一个目录。
\;
为所选的每个文件重复一个新命令。
答案 1 :(得分:0)
find ~/container -mindepth 3 -type f | xargs -i bash -c 'mv "{}" $(dirname "{}")/..'
对于每个文件,它会找到它的dirname并将其向上移动一级。
**更新**
使用GNU查找...
find ~/container -mindepth 3 -type f -execdir mv "{}" $(dirname "{}")/.. \;
while loop ...
find ~/container -mindepth 3 -type f | while read file; do
mv "$file" "$(dirname "$file")/.."
done