基于文件大小递归查找和替换

时间:2017-10-28 22:40:15

标签: bash replace

我想测试每个子目录(很多),

(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

或类似的东西。

1 个答案:

答案 0 :(得分: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表示"大于"。