20251031在Ubuntu24.04.2中文版下使用diff命令查找两份SDK的差异并删除同样的部分以便比对awk

20251031在Ubuntu24.04.2中文版下使用diff命令查找两份SDK的差异并删除同样的部分以便比对awk

2025/10/31 14:10

缘起:在荣品RD-RK3588-MID开发板的Android13下,没有/找不到截屏screenshot功能/按钮了!

由于Rockchip原厂的Android10/11/12/13/14都是有screenshot功能/按钮的。

一般认为是荣品的魔改版本的SDK中 screenshot功能/按钮 被删除/隐藏了。

那就比对一下荣品的SDK和Rockchip原厂的SDK,希望能够发现/找到是哪里 删除/隐藏的。

如果被隐藏了,那就打开啦!

如果被删除了,就用Rockchip原厂的SDK来恢复了!

开干/撸起袖子干了!

https://blog.csdn.net/wb4916/article/details/72771064?spm=1011.2415.3001.5331

Ubuntu下删除两个文件夹下相同文件名且相同内容的文件V1.1(分色排版)

1、列出两个文件夹dir1、dir2下相同的文件:

diff -rs dir1 dir2 | grep 'identical$'

(中文版本ubuntu)

rootroot@cm-System-Product-Name:/home/wwt diff -rs prk_tina_bak/ fds_tinav2.1/ \| grep "相同" > 3.txt

(英文版本ubuntu)

rootroot@cm-System-Product-Name:/home/wwt diff -rs prk_tina_bak/ fds_tinav2.1/ \| grep "identical" > 3.txt

2、删除通过diff比对找到的相同的文件(同名同内容):

awk '{print $2}' 3.txt | xargs rm -rf

awk '{print $4}' 3.txt | xargs rm -rf

3、你会发现有很多空的文件夹/目录,需要把它们找出来删除。

由于有些空文件夹里面只有空文件夹,当你删除最底层的空文件夹,上层的文件夹也是空的。

因此需要多次执行!

rootroot@cm-System-Product-Name:/home/wwt$ cd prk_tina_bak/

rootroot@cm-System-Product-Name:/home/wwt/prk_tina_bak$ find . -name "*" -type d -empty | xargs rm -rf

rootroot@cm-System-Product-Name:/home/wwt/prk_tina_bak$ find . -name "*" -type d -empty | xargs rm -rf

rootroot@cm-System-Product-Name:/home/wwt/prk_tina_bak$ find . -name "*" -type d -empty | xargs rm -rf

参考资料:

http://bbs.csdn.net/topics/320031351

awk如何删除一个文件?

awk -F, '{print $2}' test.txt | xargs rm -rf

http://blog.csdn.net/u010555688/article/details/51280783

Ubuntu 删除两个文件夹下相同文件名的文件

参考:http://bbs.chinaunix.net/forum.PHP?mod=viewthread\&tid=1851432\&page=1

百度:linux中find批量删除空文件及空文件夹脚本
find . -type f -empty -delete

https://www.cnblogs.com/cphmvp/p/5694606.html
linux_inux中find批量删除空文件及空文件夹脚本

1.{}和之间有一个空格
2.find . -name 之间也有空格
3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件

linux下批量删除空文件(大小等于0的文件)的方法
find . -name "*" -type f -size 0c | xargs -n 1 rm -f

http://www.111cn.net/sys/linux/46433.htm

linux中find批量删除空文件及空文件夹脚本

查询出所有的空文件夹

find -type d -empty

详细的LOG:

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ ll

总计 199276

drwxrwxr-x 4 jinhualong jinhualong 4096 10月 30 20:32 ./

drwxrwxrwx 21 root root 4096 10月 30 20:31 ../

-rw-rw-r-- 1 jinhualong jinhualong 204036081 10月 30 20:35 3.txt

drwxrwxr-x 34 jinhualong jinhualong 4096 10月 30 20:04 rongpin/

drwxrwxr-x 34 jinhualong jinhualong 4096 5月 30 18:52 shenzhou/

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 2}' 3.txt | xargs rm -rf

xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 4}' 3.txt | xargs rm -rf

xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ ll

总计 199276

drwxrwxr-x 4 jinhualong jinhualong 4096 10月 30 20:32 ./

drwxrwxrwx 21 root root 4096 10月 30 20:31 ../

-rw-rw-r-- 1 jinhualong jinhualong 204036081 10月 30 20:35 3.txt

drwxrwxr-x 34 jinhualong jinhualong 4096 10月 30 20:37 rongpin/

drwxrwxr-x 34 jinhualong jinhualong 4096 10月 30 20:37 shenzhou/
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ du -sh
140G .

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 2}' 3.txt | xargs rm -rf

xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 jinhualong@jinhualong-LEGION-REN7000K-26IRX:\~/new_disk_4t/diff1 awk '{print 2}' 3.txt \| xargs rm -rf xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项 jinhualong@jinhualong-LEGION-REN7000K-26IRX:\~/new_disk_4t/diff1
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 jinhualong@jinhualong-LEGION-REN7000K-26IRX:\~/new_disk_4t/diff1
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 2}' 3.txt | tr '\n' '\0' | xargs -0 rm -rf
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 4}' 3.txt | tr '\n' '\0' | xargs -0 rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ ll

总计 199276

drwxrwxr-x 4 jinhualong jinhualong 4096 10月 30 20:32 ./

drwxrwxrwx 21 root root 4096 10月 30 20:31 ../

-rw-rw-r-- 1 jinhualong jinhualong 204036081 10月 30 20:35 3.txt

drwxrwxr-x 34 jinhualong jinhualong 4096 10月 30 20:43 rongpin/

drwxrwxr-x 34 jinhualong jinhualong 4096 10月 30 20:43 shenzhou/
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 du -sh 2.1G . jinhualong@jinhualong-LEGION-REN7000K-26IRX:\~/new_disk_4t/diff1
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$ find . -name "*" -type d -empty | xargs rm -rf

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1$

使用DeepSeek解决异常:

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 2}' 3.txt | xargs rm -rf

xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项

DeepSeek:

https://chat.deepseek.com/a/chat/s/d81b3aab-abff-4560-b469-5c68efbc1bd1

Ubuntu Shell删除文件错误解决方案

ubuntu24.04.2中文版本下,shell操作:

jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/diff1 awk '{print 2}' 3.txt | xargs rm -rf

xargs: 未匹配的单引号;默认情况下,引号对于 xargs 是有特殊含义的,除非您使用了 -0 选项

这个错误信息表明,xargs 遇到了一个单引号,而默认情况下 xargs 会解析引号,这可能导致参数被错误地解释。

在默认情况下,xargs 会解析输入中的引号,所以如果文件名中包含单引号,就会导致问题。

解决这个问题有两种常见方法:

使用 -0 选项,这要求前面的命令输出以空字符(null)分隔,而不是换行符。这样可以安全地处理特殊字符。

调整前面的命令,确保输出不包含引号,或者使用其他方式处理。

但是,我们首先看看当前命令:awk '{print $2}' 3.txt 会输出第二列,然后通过 xargs 传递给 rm -rf。

如果 3.txt 中的第二列可能包含特殊字符(比如空格、引号等),那么使用 xargs 默认的分隔方式就会有问题。

建议使用 -0 选项,同时将 awk 的输出改为以空字符分隔。我们可以修改 awk 命令,使用 printf 并加上空字符作为分隔符。

在 awk 中,我们可以使用 printf 并指定分隔符为空字符,通常使用 \0。

所以,我们可以将命令改为:

awk '{printf "%s\0", $2}' 3.txt | xargs -0 rm -rf

这样,每个文件名都以空字符分隔,xargs 的 -0 选项就可以正确解析,即使文件名中有空格、引号等特殊字符。

但是,注意:这个命令会删除 3.txt 中第二列所指定的所有文件或目录,所以请确保 3.txt 中的第二列确实是你想要删除的文件或目录的路径,并且没有错误。

另外,如果 3.txt 的第二列有相对路径,请确保当前目录正确,或者路径是绝对路径。

如果 3.txt 的第二列不是文件名,而是其他内容,那么这个命令可能会误删文件,所以务必谨慎。

如果你不确定,可以先使用 awk '{printf "%s\0", $2}' 3.txt | xargs -0 echo rm -rf 来查看会删除哪些文件,确认无误后再执行。

但是,注意:在 Ubuntu 24.04.2 中,你的 shell 是中文环境,所以错误信息是中文的。但是命令本身是相同的。

所以,最终的命令是:

awk '{printf "%s\0", $2}' 3.txt | xargs -0 rm -rf

如果你的 awk 版本不支持 \0(虽然大多数现代 awk 都支持),你可以尝试使用 printf 和 -v 选项来输出空字符,但上述方式在 GNU awk 中应该可以。

如果不行,还有一种备选方案:使用 tr 命令将换行符替换为空字符,但是这样要求文件名中不能有换行符(通常文件名中不含换行符)。

备选方案:

awk '{print $2}' 3.txt | tr '\n' '\0' | xargs -0 rm -rf

但是,第一种方法使用 awk 的 printf 直接输出空字符更直接。

请根据你的实际情况选择。

这个错误是因为 xargs 默认会解析引号,如果文件名中包含单引号就会报错。有几种解决方案:

方案1:使用 -0 选项(推荐)
bash
awk '{print $2}' 3.txt | tr '\n' '\0' | xargs -0 rm -rf

方案2:禁用 xargs 的引号解析

bash

awk '{print $2}' 3.txt | xargs -d '\n' rm -rf

方案3:使用 while 循环逐行处理

bash

awk '{print 2}' 3.txt \| while IFS= read -r file; do rm -rf "file"; done

方案4:检查文件内容并处理特殊字符

如果怀疑文件名包含特殊字符,可以先检查:

bash

查看文件内容

awk '{print $2}' 3.txt | cat -A

如果有特殊字符,先清理文件名

awk '{print $2}' 3.txt | sed "s/'//g" | xargs rm -rf

推荐使用方案1

最安全的是方案1,因为它能正确处理所有特殊字符(包括空格、引号、换行符等)。

注意:在执行删除操作前,建议先确认要删除的文件:

bash

先查看要删除的文件列表

awk '{print $2}' 3.txt

确认无误后再执行删除

awk '{print $2}' 3.txt | tr '\n' '\0' | xargs -0 rm -rf

这样可以避免误删重要文件。

相关推荐
Hello.Reader3 小时前
Flink DataStream 从 WindowStrategy 到 WindowProcessFunction 的全链路
网络·数据库·flink
dept1233 小时前
使用mysql客户端工具造数据方法入门
数据库·mysql
爱基百客3 小时前
利用Jaspar进行转录因子结合位点预测
数据库·jasper
程序新视界4 小时前
MySQL的数据库事务、ACID特性以及实战案例
数据库·后端·mysql
新手小白*4 小时前
Redis Cluster集群理论
数据库·redis·缓存
15Moonlight5 小时前
09-MySQL内外连接
数据库·c++·mysql
大G的笔记本5 小时前
Redis 分布式锁如何保证同一时间只有一个客户端持有锁
数据库·redis·分布式
呆呆小金人5 小时前
SQL优化实战:从慢查询到高效查询
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师