2016-01-06 173 views
-1

如何将目录中的所有文件和文件夹从其子目录移动到父目录?在非常深的文件夹目录中包含文件。如何将目录中的所有文件和文件夹移动到父目录?

我想实现的是我在.时将此转换:

. 
./aDir 
./aDir/bFile 
./aDir/cDir 
./aDir/cDir/dDir 
./aDir/cDir/dDir/eFile 

要这样:

. 
./aDir 
./bFile 
./cDir 
./dDir 
./eFile 

我假设你使用unix命令find不过,我可以”似乎得到它的工作。

这里是我的尝试:

find -mindepth 1 -maxdepth * -print0 | xargs -0 mv -i -t ~/Desktop 
+0

星号(*)是特殊的外壳。另外我发现的这个发现不会把它作为maxdepth的值。由于缺省值'尽可能深,只要删除'-maxdepth *'。你也要求移动文件,但指定'-type d'? –

+0

另外你还没有找到开始目录。 –

回答

1

既然你正在寻找非巢您的目录你需要MV他们在深度优先顺序,否则更深的目录可以在较浅的那些内部mv'd 。

使用非常相似的语法来尝试下面的内容似乎做了什么需要。

find . -mindepth 2 -depth -type d -print0 | xargs -0 -I{} mv {} ~/Desktop 

实施例:

$ find . -mindepth 1 -depth -type d 
./a/b/c2 
./a/b/c 
./a/b 
./a 
$ find . -mindepth 2 -depth -type d -print0 | xargs -0 -I{} mv {} . 
$ find . -mindepth 1 -depth -type d 
./a 
./b 
./c 
./c2 
+0

我得到错误'mv:./a和./a是相同的,但是我确实得到了跳到父目录的所有子目录。但是,我没有将目录中的任何文件放到父目录中。我刚刚使用'mkdir'和'touch'来创建一个类似于你的例子的目录,但是在'a','b'&'c'目录中有文件 – joshuatvernon

+1

@joshuatvernon如果你想把所有的文件移动到新的位置你可以简单地从find命令中删除'-type d'。 我编辑了答案,它应该是'-mindepth 2'以避免该错误 – JSCarter

1

也许这可以帮助:

for i in $(find .); do cp -r $i .; done 

当你在.其转换这样的:

. 
./a 
./a/b 
./a/b/c 

要这样:

. 
./a 
./a/b 
./a/b/c 
./c 
./b 
./b/c 
1

试试这个

find . -maxdepth 1 -exec mv {} .. \; 

你可能会得到这样的信息

mv: cannot move `.' to `../.': Device or resource busy 

不过不要担心,这是因为 ''这个目录正在尝试移动。

+1

这不是OP要求的结果。 –

+0

这将当前目录内的所有文件和文件夹移动到一个目录中。 – joshuatvernon

1

我想你想:

find . -mindepth 1 -depth -print0 | xargs -0 mv -i -t ~/Desktop 
+0

我收到错误:'mv:illegal option - t usage:mv [-f | -i | -n] [-v]源目标 mv [-f | -i | -n] [-v] source ... directory' – joshuatvernon

+0

由于他在他的例子中使用了'-t',我假设他的'mv'支持该选项......如果你的'mv'不使用这个xargs调用:'xargs -0 -I {} mv {}〜/ Desktop' –

相关问题