У меня есть папка с файлами как это:
1.jpg (Modified 2018-07-18 12:00:00)
1.png (Modified 2018-07-17 12:00:00)
2.jpg (Modified 2018-07-18 14:00:00)
3.jpg (Modified 2018-07-17 20:00:00)
4.jpeg (Modified 2018-07-17 12:00:00)
4.gif (Modified 2018-07-18 11:00:00)
4.png (Modified 2018-07-18 13:00:00)
И у меня должен быть он как это:
1.jpg (Modified 2018-07-18 12:00:00)
2.jpg (Modified 2018-07-18 14:00:00)
3.jpg (Modified 2018-07-17 20:00:00)
4.png (Modified 2018-07-18 13:00:00)
Сохраните новейшие файлы, неважно, расширением.
Я записал короткий сценарий удара.
Требуются все файлы непапки в папке (от которого это выполняется), и перемещает более старые файлы с тем же именем к папке.
Я назвал папку "remove_##", где ## является числом.
Названия файлов взяты в качестве того же, если они - то же перед последней точкой! например, 123.png взят в качестве того же как 123.jpg, но не в качестве 123.tar.gz.
Если два (или больше) файлы имеют то же время изменения, чем сценарий сохраняет первый, он встретился и пишет сообщение для вывода.
Это ничего не должно делать плохо при использовании его в правильной папке!
remove_older.sh:
#!/bin/bash
REMOVE_FOLDER="remove_"$$
mkdir $REMOVE_FOLDER
ls --color=never -p | grep -v / | sed "s;\..*;;g" | sort -n | uniq | \
while read -r line || [[ -n "$line" ]]; do
time=0 # currently a youngest mtime of files with $line name
newest=0 # currently a youngest file with $line name
for file in $line.* ; do
mtime=`stat -c %Y $file` # reads mtime of $file
if [[ "$mtime" -gt "$time" ]]; then # we found younger file
time=$mtime
newest=$file
elif [[ "$mtime" -lt "$time" ]]; then # we found older file
mv $file $REMOVE_FOLDER
else # files have same modification time -> does nothing
echo "File $file has same modification time as $newest!"
fi
done
if [[ "$newest" != 0 ]]; then # we found some files!
for file in $line.* ; do
if [[ $file != $newest ]]; then
mv $file $REMOVE_FOLDER # remove older file
fi
done
fi
done