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
这样可以避免误删重要文件。
