繁体   English   中英

Linux命令行以递归方式删除其他文件夹中不存在的文件

[英]Linux command line remove files recursively which dont exist in other folder

我在文件夹/ 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

谢谢!

这是使用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

运行一次以回显是否可以删除正确的文件,如果一切正常,请从rm删除echo再次运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM