gpt4 book ai didi

bash - 在保留文件的同时使用 Bash 删除文件结构中的级别

转载 作者:行者123 更新时间:2023-11-29 09:31:57 24 4
gpt4 key购买 nike

提前感谢您的时间和帮助。

我有这样一种情况,我有一个包含几十个子目录的目录,其中所有子目录只包含一个文件(出于某种错误的原因)。我试图将所有文件在 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)。

我已经阅读了 Bash 中 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 代替 mv 但这似乎什么也没做,即使我以 SUDO 身份执行也是如此。 cp 带来了额外的问题,我不想复制文件,只需删除包含它们的中间文件夹即可。

您可能已经发现我试图避免在 Linux 中简单地使用 GUI 并走 Bash 路线,原因很明显,在窗口管理器中执行此操作需要数小时,而我确信有一种在几秒钟内在 Bash 中完成的方法。这是一项在 Linux 文件管理器中通常需要几秒钟的任务,如果要处理的文件夹和文件少于十几个要移动的话,但目前的情况是有几十个不必要的 DIR 只包含一个文件。因此,我需要一个干净的 Bash 解决方案。

再次感谢您的帮助。这是一个让我沮丧了数周的问题。

我欢迎任何问题。

最佳答案

xargsmv 一起使用可以解决这个问题。您应该从 DIR.Main 的当前工作目录开始,然后使用一个不同的目录将所有内容移动到其中。它需要有所不同,否则您最终会得到(空的)原始目录,其中夹杂着您的新文件和目录。我们可以解决这个问题,但我认为没有任何必要。

find -maxdepth 2 -mindepth 2 | xargs -I '{}' mv '{}' <PATH_TO_NEW_LOCATION>/

find 结果是目录树中比当前目录更深一层的所有文件和目录的列表。 xargs 调用然后将所有这些结果移动到给定的位置。

我已经对其进行了测试,但您可能也想在将其用于实时数据之前对其进行测试,或者至少复制一份。

关于bash - 在保留文件的同时使用 Bash 删除文件结构中的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com