Bash: 我如何将这两个查找命令合二为一?

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”,这不是我想要做的。

因为我不善于解释事情:第一个命令中的所有内容都应该具有确切的 name/path 指定,并且 不应该 被 sed 修改。第二个命令中的所有内容都应由 sed 修改,但我只想 运行 两个命令都使用一个查找命令。

不是肯定的我明白你想做什么,但如果你仍然希望数组在第一个命令中包含相同的东西,但第二个命令中的文件

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 短路,如果你想要相反,更换顺序。