我在文件夹/ 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
谢谢!
答案 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
后重新运行。