我有许多不同名称的目录,每个目录都包含一个名为 httpd-ack 的子目录(所有目录的名称都相同),其中存储了文件。
我需要一个命令来递归进入每个目录,输入子目录 httpd-ack,将所有文件上移一级,然后删除 httpd-ack 文件夹(现在是空的)。
开始是
名称1/httpd-ack/(文件)
名称2/httpd-ack/(文件)
名称3/...[...]
结局应该是
名称1/(文件)
名称2/(文件)
名称3.....[...]
任何帮助都感激不尽....
答案1
感谢@Jos,这对我有用:
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
调用 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
,并在每个目录上调用新定义的函数。
我相信这可以得到改进。编辑们,请随意。