递归查找和替换根据文件大小
我想测试,为每个子目录(很多),递归查找和替换根据文件大小
(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
或类似的东西。
问题就出在你的病情
if [ $stat -c%s folder.jpg ] > [ $stat -c%s Folder.jpg ];
该管道空字符串的文件[
。你想要的是
if [ $(stat -c%s folder.jpg) -gt $(stat -c%s Folder.jpg) ];
其中-gt
表示“大于”。
谢谢 - 更正了这个问题并修改了问题。少一个问题。 – user3447273
@ user3447273您似乎没有正确纠正它。细看。 –
认为这次是正确的...... – user3447273
如果超过2个文件,您是否删除除最大的文件之外的所有文件? – karakfa
是的。我假设你可以在这种情况下多次运行脚本。 – user3447273
我建议,找到并打印大小的文件名,按文件大小排序,从列表中删除最后一行,然后删除其余大小。 – karakfa