Linux命令行递归删除其他文件夹

时间:2016-09-17 09:55:04

标签: linux bash shell command-line

我在文件夹/ 1中有以下文件夹结构:

/1/1/
  1.png
  2.png
  5.png
  6.png

/1/2/
  3.png
  4.png

/1/3/
  10.png
  11.png
  14.png

此示例中有子文件夹1-3。在现实中它的数百个文件夹。每个子文件夹中都包含一定数量的png文件。

然后我有一个文件夹/ 2,它具有完全相同的子文件夹结构,但其中有更多图像然后文件夹/ 1:

/2/1/
  1.jpg
  2.jpg
  3.jpg
  4.jpg
  5.jpg
  5.jpg

/2/2/
  1.jpg
  2.jpg
  3.jpg
  4.jpg

/2/3/
  10.jpg
  11.jpg
  12.jog
  13.jpg
  14.jpg

请注意文件夹2(.jpg)中的不同文件扩展名。文件的共同点只是文件名。文件夹/ 1和/ 2中的扩展名不同。

我试图在Linux中实现的是清理文件夹/ 2并且只有文件夹/ 1中存在同名文件的图像。

任何人都可以通过命令行或bash脚本向我提供命令吗?

文件夹/ 2中的最终结果应为:

/2/1/
  1.jpg
  2.jpg
  5.jpg
  6.jpg

/2/2/
  3.jpg
  4.jpg

/2/3/
  10.jpg
  11.jpg
  14.jpg

谢谢!

1 个答案:

答案 0 :(得分:2)

以下是使用find和bash中的简单while循环执行此操作的方法:

cd /path/to/2 || exit 1
find -type f -name '*.jpg' -print0 |
    while IFS= read -r -d '' path; do
        if [[ ! -e "/path/to/1/${path%.jpg}.png" ]]; then
                  # ^^^^^^^^^^ adjust this path
            echo rm -- "$path"
           #^^^^ remove this after the first dry-run
        fi
    done

运行一次以回显它是否会删除正确的文件,如果一切正常,请从echo删除rm后重新运行。