关于删除多余文件问题
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
关于删除多余文件问题
从网上下载了很多桌面壁纸,但是有些是重复的,只是分辨率不同而已,其中这种差异已反应到文件名上,如:
abc_800x600.jpg
abc_1024x768.jpg
ccc_800x600.jpg
ccc_1024x768.jpg
ccc_1280x768.jpg
我想只保留一份文件,将多余分辨率的图片全部删除,试问有没有简单的命令可以处理?如果非要写脚本的话又怎么写呢?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
是删除,不是修改。
同时分辨率大小的是不固定的,不是每张图片都有1024*768大小的。
如果用脚本的话,恐怕要双重循环。
同时分辨率大小的是不固定的,不是每张图片都有1024*768大小的。
如果用脚本的话,恐怕要双重循环。
-
- 帖子: 100
- 注册时间: 2008-09-25 16:06
Re: 关于删除多余文件问题
代码: 全选
find path ! -name '*1024x768.jpg' -exec rm -f {} \;
Power cloaked in simplicity !
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
都说不是全都有1024*768大小的咯,比如:
abc_1024*768.jpg
abc_1280*768.jpg
ddd_800*600.jpg
eee_1440*900.jpg
ffa_800*600.jpg
ffa_1280*700.jpg
....
...
....
abc_1024*768.jpg
abc_1280*768.jpg
ddd_800*600.jpg
eee_1440*900.jpg
ffa_800*600.jpg
ffa_1280*700.jpg
....
...
....
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
代码: 全选
#!/bin/bash
#program: remove duplicate pictures which have excess display rate.
#version: 1.0
#by DD++ 2010-5-24
read -p "Please input the picture directory,like this \"/home/usr/picture\": " dir
while [ -z "$dir" ] || [ ! -d "$dir" ]
do
echo "The $dir is NOT exist in Linux system!"
read -p "Please try again: " dir
done
filelist=$(ls $dir)
while [ -n "$filelist" ]
do
declare -i count=1
filename=$(echo $filelist | cut -d " " -f 1)
filelist2=$(echo $filelist | cut -d " " -f 2-)
[ "$filelist" == "$filelist2" ] && break #如果文件列表只有一个时,不管cut -f 后取什么都会返回这个文件,所以必须加这句
for filename2 in $filelist2
do
if [ $(echo $filename | cut -d "_" -f 1) == $(echo $filename2 | cut -d "_" -f 1) ]; then
rm -v "$dir/$filename2"
count=$(($count+1))
else
filelist=$(echo $filelist2 | cut -d " " -f ${count}-)
break
fi
done
done
echo "Well done, goodbye!"
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
用软件就显得聪明了吗?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
那好吧,我非要代码,不要软件总行了吧
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 关于删除多余文件问题
不需要双重循环。
循环一次应该可以搞定,思路是这样:把 abc_800x600.jpg 这样的文件名改为 abc.jpg,在改名时如果已经存在 abc.jpg,就用你的条件判断一下是保留原来的 abc.jpg,还是覆盖,如果保留,就把正在处理的 abc_800x600.jpg 这样的文件删除。
循环一次应该可以搞定,思路是这样:把 abc_800x600.jpg 这样的文件名改为 abc.jpg,在改名时如果已经存在 abc.jpg,就用你的条件判断一下是保留原来的 abc.jpg,还是覆盖,如果保留,就把正在处理的 abc_800x600.jpg 这样的文件删除。
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
楼上的好主意,不知哪个效率会更高点,哈哈
-
- 帖子: 67
- 注册时间: 2009-11-12 20:27
Re: 关于删除多余文件问题
代码: 全选
#!/bin/bash
#program: remove duplicate pictures which have excess display rate.
#version: 3.0
#by DD++ 2010-5-31
dir=${1:-$PWD}
#dir=${dir%/} #没必要去掉尾部的/,shell自动处理
[ ${dir:0:1} != "/" ] && dir="$PWD/$dir"
if [ ! -d "$dir" ]; then
echo "The $dir is NOT exist in Linux system!"
exit 0
fi
read -p "Do you want to backup the duplicate pictures?(y/n) " bkflag
if [ "$bkflag" == 'y' -o "$bkflag" == 'Y' ] && [ ! -d "${HOME}/picbk" ]; then
mkdir ~/picbk
fi
filelist=$(ls $dir)
for filename in $filelist
do
filenamebase=${filename%_*}\.${filename##*.}
if [ ! -e $dir/$filenamebase ]; then
mv -v $dir/$filename $dir/$filenamebase
else
[ "$bkflag" == 'y' -o "$bkflag" == 'Y' ] && mv -v $dir/$filename ~/picbk/ || rm -v $dir/$filename
fi
done
[ "$bkflag" == 'y' -o "$bkflag" == 'Y' ] && echo -e "Take easy, pictures has been backuped\nYou can find them in $HOME/picbk/"
exit 0
-
- 帖子: 4
- 注册时间: 2005-09-24 12:12
Re: 关于删除多余文件问题
代码: 全选
#!/bin/bash
PirFileNmShort=
for filename in `ls`; do
CurFileNmShort=${filename%_*.jpg} # match aaa_xxxx*yyyy.jpg
test "$CurFileNmShort" = "$PirFileNmShort" && rm $filename
PirFileNmShort=$CurFileNmShort
done