我想测试每个子目录(很多),
(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 :(得分: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
表示"大于"。