我想删除所有名称没有“@ 2x”的图像,我想编写一个shell脚本来完成此操作。这就是我的工作:
#!/bin/bash
dir="/Users/me/Workspace/"
cd $dir
all_pngs=`find . -name "*.png" | sort -u`
for png in $all_pngs
do
# echo "$png"
#get the dirname
dirname=`dirname $png`
#get the filename without dir
filename=`basename $png`
#get name without suffix
name=`echo "$filename" | cut -d '.' -f1`
realname=`echo "$name" | grep -v "@2x"`
if [ -n $realname ]; then
echo "$realname"
fi
done
我的问题是我不知道如果没有“@ 2x”我怎么能找到这个名字。
答案 0 :(得分:1)
我不确定你要对你的其余部分做什么,但这样的事情应该有效
find /Users/me/Workspace/ -type f -name '*.png' \! -name '*@2x*' -exec echo rm '{}' +
当您确信自己想要什么时,请移除echo
。
由于! exp
在查找中的优先级高于测试和操作之间隐含的-a
,因此上述内容被视为
find /Users/me/Workspace/ (-type f) AND (-name '*.png') AND (! -name '*@2x*') AND (-exec echo rm '{}' +)
答案 1 :(得分:0)
你在for循环中使用了许多不需要的操作,这些操作不是必需的(但是它的用途完全是什么?)。您需要在for..loop
中使用简单的逻辑,如下所示。或者在一个句子中你可以使用@BroSlow给出的很好的答案
您可以检查您的文件名是否包含“@ 2x”或不包含
if [[ $png = *@2x* ]] //Yes it contain "@2x"
then
echo "File name contain @2x keep as it is."
else
//remove file // rm -f $png
fi
使用grep
if grep -o "@2x" <<<"$png" >/dev/null
then
echo "File name contain @2x keep as it is."
else
//remove file // rm -f $png
fi