我有许多文件夹,这些文件夹里面还有一个子文件夹,并且子文件夹里面还有文件。我想把第二层的文件移到第一层,而且不知道它们的名称。
以下是一个简单的例子:
Before running a script:
/temp/1stlevel/test.txt /temp/1stlevel/2ndlevel/test.rtf
After running a script:
/temp/1stlevel/test.txt /temp/1stlevel/test.rtf
我已经很接近了,但是还缺少一些东西,我相信这很简单/愚蠢。这是我运行的内容:
find . -mindepth 3 -type f -exec sh -c 'mv -i "$1" "${1%/*}"' sh {} \;
这是我的理解:
这就是我得到的结果:
mv: './1stlevel/2ndlevel/test.rtf' and './1stlevel/2ndlevel/test.rtf' are the same file
有什么建议吗?
更新:George,这是很棒的东西,谢谢!我学到了很多并做了笔记。使用mv
命令而不是更复杂的命令是很聪明的。这不是我第一次被指责用最困难的方式去做事情了!
然而,虽然它在一个文件夹集合中运行得很好,但如果我有更多的文件夹,它就不能按预期工作。这就是我的意思:
之前:
new
└── temp
├── Folder1
│ ├── SubFolder1
│ │ └── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ │ └── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
│ └── SubTest3.txt
└── Test3.txt
之后:
new
└── temp
└── Folder3
├── Folder1
│ ├── SubFolder1
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ └── Test2.txt
├── SubFolder3
├── SubTest1.txt
├── SubTest2.txt
├── SubTest3.txt
└── Test3.txt
希望达成的目标:
new
└── temp
├── Folder1
│ ├── SubFolder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
├── SubTest3.txt
└── Test3.txt
如果想要更加高级一些:
new
└── temp
├── Folder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubTest3.txt
└── Test3.txt
- 虽然后面在我的脚本中会删除空文件夹,但我不需要变得花哨。
顺便说一句,在Notepad++中这花了我很长时间才画出来。你用的是什么工具?
find
和mv
命令的问题。 - jwwmv
最终会涉及其中,而find
恰好是OP尝试的一部分。但正如发布的答案所示,可以使用bash编程语言的一个特性来完成操作,而无需使用find
。这绝对是一个编程问题,即使它根本不是在脚本中发生。 - Mad Physicist