
[英]How to send files from folder recursively to command in linux console?
[英]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.