繁体   English   中英

Bash:如何将这两个find命令组合成一个?

[英]Bash: how would I combined these two find commands into one?

我有

IFS=$'\n' read -d '' -ra files < <(find / -name "*.lproj" ! -iname "En*" ! -name "Base*" -o -name "*@3x.png" -o -name "*@3x.jpg" -o -name "*@3x.3ds" -o -path "/private/var/mobile/Containers/Bundle/Application/*/iTunesArtwork" -o -path "/private/var/mobile/Containers/Bundle/Application/*/*/*-568h@2x.png" -o -name "*~iphone*" ! -path "*/Kik.app/*" ! -path "*/fiverr.app/*" -o -path "/private/var/mobile/Containers/Data/*/*/Library/Caches" -o -path "/private/var/mobile/Documents/Flex/*.dat" -o -path "/private/var/mobile/Containers/Data/*/*/tmp/*" -o -path "/private/var/mobile/Documents/CyDown/*" -o -path "/private/var/db/stash/_.*/Applications/*/*-568h@2x.png" -o -path "/private/var/mobile/Containers/Data/*/*/Library/googleanalytics*" -o -path "/private/var/mobile/Containers/Data/*/*/Library/*FlurryFiles" -o -path "/private/var/mobile/Library/BatteryLife/Archives/*" -o -path "/private/var/tmp/*" -o -path "/private/var/lib/apt/lists/partial/*" -o -path "/private/var/mobile/Library/Logs/*" -o -path "/private/var/logs/*" -o -path "/private/var/root/.bash_history" -o -path "/private/var/mobile/Library/googleanalytics*"  -o -path "/private/var/mobile/Library/Logs/CrashReporter/DiagnosticLogs/*" -o -path "/private/var/mobile/Library/Caches/*"  ! -name "libactivator.plist" -o -iname "*.log" -o -iname "*.old" -o -iname "*.tmp")
du -hc "${files[@]}" 2>/dev/null | tail -1
 rm -r "${files[@]}" >/dev/null 2>&1

find / -path "/path/to/location" -name '*@2x.png' | sed 's/@2x//' | xargs rm

第一个查找具有指定名称和路径的文件,计算总大小,然后将其删除。 第二个查找所有以“ @ 2x.png”结尾的文件,然后尝试从末尾删除“ @ 2x.png”,然后删除该文件。

那么,如何将这两个命令组合在一起?

注意:有一些直接路径和名称(在第一个命令中)以“ @ 2x.png”结尾,我不想从中删除“ @ 2x.png”。 所以我不能只是将它们组合在一起。 例如(如果它们只是组合在一起)在第一个命令中具有file@2x.png (意味着我想删除该确切名称)将意味着sed会删除“ @ 2x”,这不是我想要的。

因为我不擅长解释事物:一切都在第一个命令应该有指定的确切名称/路径, 不应由SED修改。 第二个命令中的所有内容都应由sed修改,但我只想为两个命令运行一个find命令。

不肯定,我理解您要执行的操作,但是如果您仍然希望数组在第一个命令中包含相同的内容,但在第二个命令中包含相同的文件

find / \\( -name "*.lproj" ... -iname "*.tmp" \\) -print -o -path "/path/to/location" -name '*@2x.png' -exec bash -c 'echo rm "${1/\\@2x/}"' bash {} \\;

注意:删除上面的echo即可得到实际的rm 另外,请注意,如果文件符合添加删除阵列的条件,则它们将被添加到阵列中,但不会被删除,如果出现短路,则-o表示相反;如果相反,请替换顺序。

暂无
暂无

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

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