导航目录并将文件向上移动一级,递归

导航目录并将文件向上移动一级,递归

我有许多不同名称的目录,每个目录都包含一个名为 httpd-ack 的子目录(所有目录的名称都相同),其中存储了文件。

我需要一个命令来递归进入每个目录,输入子目录 httpd-ack,将所有文件上移一级,然后删除 httpd-ack 文件夹(现在是空的)。

开始是

名称1/httpd-ack/(文件)

名称2/httpd-ack/(文件)

名称3/...[...]

结局应该是

名称1/(文件)

名称2/(文件)

名称3.....[...]

任何帮助都感激不尽....

答案1

感谢@Jos,这对我有用:

  1. movefiles.sh使用以下代码 创建一个名为(并将其设置为可执行)的文件:

    #!/bin/bash
    path=$1
    echo "Now processing $path" 
    cd "$path" 
    if [ -d "./httpd-ack" ]; then 
     cd httpd-ack 
            mv * ../ 
            cd .. 
            rmdir httpd-ack 
        fi
    
  2. 调用 find 如下:

    find . -maxdepth 1 -type d -exec ./movefiles.sh {} \;
    

它非常有效......(我没有尝试@bac0n 解决方案。)

答案2

这个脚本应该是一个很好的开始:

#!/bin/bash

moveFiles () {
    path=$1
    echo "Now processing $path"
    cd "$path"
    if [ -d "./httpd-ack" ]; then
        cd httpd-ack
        mv * ../
        cd ..
        rmdir httpd-ack
    fi
}

find top/level/dir -type d -exec moveFiles {} \;

首先,它定义一个函数moveFiles,该函数移动到httpd-ack目录(如果存在)并向上移动所有文件,然后cd向上移动并删除现在为空的httpd-ack

然后,它找到从 开始的所有目录/top/level/dir,并在每个目录上调用新定义的函数。

我相信这可以得到改进。编辑们,请随意。

相关内容