2017-10-28 60 views
0

我想测试,为每个子目录(很多),递归查找和替换根据文件大小

(1)是否有两个文件(没有之一),在文件名匹配的字符串,如:

find . -iname "*older.jpg" 

比方说第一个子目录结果命令两个结果:

Folder.jpg 
folder.jpg 

我要删除的文件较小。

(2)如果有两个文件在子目录,比较每个的大小和删除较小的文件,像这样:

if [ $(stat -c%s folder.jpg) -gt $(stat -c%s Folder.jpg) ]; then rm Folder.jpg; fi 

(3)因此,考虑到(1)和(2 ),这应该做任务,如果你是在一个给定的子目录,这是实际可行的:

#!/bin/bash 
cd /media/sdx/specific_directory 
find . -iname "*older.jpg" > ~/iname.txt #send the filenames matching the string to the "iname.txt" file 
if [ $(wc -w ~/iname.txt) -gt 1 ]; then # if there is more than one 'word' (file name) then do the next step 
    if [ $(stat -c%s folder.jpg) -gt $(stat -c%s Folder.jpg) ]; then #compare sizes 
    rm Folder.jpg #if first file is bigger, remove that one 
    else rm folder.jpg #else remove the other one 
    fi 
fi 

你如何修改的上方,使得它所有的这些步骤,每个子目录?例如,使用的东西:

find . -iname 

或类似的东西。

+0

如果超过2个文件,您是否删除除最大的文件之外的所有文件? – karakfa

+0

是的。我假设你可以在这种情况下多次运行脚本。 – user3447273

+0

我建议,找到并打印大小的文件名,按文件大小排序,从列表中删除最后一行,然后删除其余大小。 – karakfa

回答

0

问题就出在你的病情

if [ $stat -c%s folder.jpg ] > [ $stat -c%s Folder.jpg ]; 

该管道空字符串的文件[。你想要的是

if [ $(stat -c%s folder.jpg) -gt $(stat -c%s Folder.jpg) ]; 

其中-gt表示“大于”。

+0

谢谢 - 更正了这个问题并修改了问题。少一个问题。 – user3447273

+0

@ user3447273您似乎没有正确纠正它。细看。 –

+0

认为这次是正确的...... – user3447273