用于将子文件夹“提取”到父文件夹的脚本

Seb*_*ian 5 bash scripts directory mv

这会有点棘手,我想:-)

当我在文件夹中打开终端并运行脚本时,该脚本应该:

  1. 将所有子文件夹的所有内容移动到顶级父文件夹(递归)
  2. 删除所有空文件夹

我们所在的父文件夹将不包含文件夹,只包含所有文件夹的内容。

它也适用于隐藏的文件和文件夹。这对房屋清洁非常有用:-)

我试过这样的事情:

find . -type f -name "*" -depth | xargs mv ./
Run Code Online (Sandbox Code Playgroud)

但没有运气。

感谢您的帮助 :-)

kos*_*kos 10

在我看来,最简单、最干净的方法是使用以下命令:

find . -type f -exec mv --backup=numbered {} . \; && find . -maxdepth 1 -type d -exec rm -r {} +
Run Code Online (Sandbox Code Playgroud)

find 命令#1:

  • .: 在当前工作目录中搜索;
  • -type f: 搜索文件;
  • -exec [...]:为每个结果执行一个命令(使用{} [...] \;)或为所有结果执行一个命令(使用{} +);
  • mv --backup=numbered . \;: 将每个结果移动到当前工作目录中,为当前工作目录中已有的具有相同文件名的文件创建一个备份;

find 命令#2:

  • .: 在当前工作目录中搜索;
  • -maxdepth 1:仅在目标目录层次结构的第一级搜索;
  • -type d: 搜索目录;
  • -exec [...]:为每个结果执行一个命令(使用{} [...] \;)或为所有结果执行一个命令(使用{} +);
  • rm -r {} +: 删除每个结果;

在测试目录层次结构上进行测试:

find . -type f -exec mv --backup=numbered {} . \; && find . -maxdepth 1 -type d -exec rm -r {} +
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 5

  1. 要在当前目录中递归移动所有文件,请注意这会将所有文件移动到此目录(而不是它们的父目录):

    find . -type f -exec mv -i -t . {} +  
    
    Run Code Online (Sandbox Code Playgroud)

而不是-i您可以使用--backup=numbered@kos 已经显示的那样。

  1. 删除所有空目录:

    find . -type d -empty -delete
    
    Run Code Online (Sandbox Code Playgroud)

阅读man find以获得更多想法。