在此先感谢您的时间和帮助。在保留文件的同时用Bash删除文件结构中的级别
我有一个情况,我有一个DIR包含几十个子DIR,其中所有的子DIR只包含一个文件(出于某些错误的原因)。我试图将所有文件在DIR树中上移两级,同时以其他所有方式保留文件结构。这里是我的意思的例子:
|--- DIR.Main
|--- |---DIR.Sub-A
|--- |--- |--- File.Sub-A
|--- |---DIR.Sub-B
|--- |--- |--- File.Sub-B
|--- |---DIR.Sub-C
|--- |--- |--- File.Sub-C
|-->Continue for approx. 50 DIR.Subs
我不需要在文件结构中的DIR.Sub水平,并希望它看起来像这个:
|--- DIR.Main
|--- |---File.Sub-A
|--- |---File.Sub-B
|--- |---File.Sub-C
这里是什么复利问题,虽然:文件名不整洁和有序的逻辑与前面的例子中,而是被随意命名如下:
|--- DIR.Main
|--- |---DIR.Sasjaljesea
|--- |--- |--- File.Sasjalsaejesea.mpg
|--- |---DIR.qwerqwerewqwer
|--- |--- |--- File.qwerqweresezswqwer.mpg
|--- |---DIR.xcbxcvxcvbxcvb
|--- |--- |--- File.xcsfasdbxcvxcvbxcvb.mpg
|-->ETC
然而,救命之恩的是,在上述考试所有文件共享相同的文件类型(在这种情况下为mpg)。
我读过的MV,并在猛砸CP相关文件,并没有能够拿出一个办法做到这一点在一个没有通过手动输入所有的文件名。我还研究了Xrandr和类似命令的选项。我已经能够得出一个解决方案最接近的是这样的:
find /path/to/search -type f -iname "*.mp3" -exec mv {} path/to/music \;
从这个答案摘自:Moving multiple files in subdirectories (and/or splitting strings by multichar delimeter) [bash]
在哪里我明明纠正-iname改为.mpg和DIR的适合我的情况。
当我做这个它没有找到的所有文件,并将它们转移到我想要的文件夹,但它并置的所有文件到一个不可读.MPG文件,而不是复制递归每个单独的文件,并保持文件结构,我想。我已经在上面的命令中用cp递归地研究了cp,但是这似乎什么也不做,即使当我作为SUDO执行时也是如此。 cp带有额外的问题,我不想复制文件,只需删除它们所包含的中间文件夹即可。
你可能已经想通了,我试图避免简单地使用Linux中的GUI和去猛砸路线,原因很明显,这将需要几个小时才能做到这一点的窗口管理器,而我敢肯定有是在几秒钟内在Bash中完成的一种方法。这是一项任务,在Linux文件管理器中通常需要几秒钟的时间,如果有人正在处理少于十几个文件夹和文件移动,但目前的情况是,几十个不必要的DIR包装只有一个文件。因此,我需要一个干净的Bash解决方案。
再次感谢您的帮助。这是几个星期来令我感到沮丧的问题。
我欢迎任何问题。
对文件操作的模式问题,尤其是'DIR ...'图。继续发帖,祝你好运! – shellter 2014-09-29 03:33:26