
У меня есть папка, полная разных файлов, но без расширения. Как удалить все файлы, которые являются zip-файлами?
решение1
В моем Kubuntu следующая команда:
file -b --mime-type path/to/some/zip
возвращает:
application/zip
Я могу использовать его для обнаружения всех zip-файлов в текущем каталоге (с подкаталогами). Команда:
find . -type f -exec sh -c '
for f do
file -b --mime-type "$f" | grep -q "^application/zip$" && {
printf "%s\n" "$f"
# rm "$f"
}
done
' find-sh {} +
Если результат выглядит приемлемым, раскомментируйте rm "$f"
(удалите #
), чтобы действительно удалить файлы.
Примечания:
Ни то,
-b
ни другое не--mime-type
являются переносимыми вариантамиfile
. Если вашfile
не поддерживает их, то проверьте, что голыеfile path/to/some/zip
отпечатки. Это может быть:path/to/some/zip: Zip archive data, …
Где
…
обозначает дополнительную информацию. Если бы мне нужно было положиться на этот вывод, то мояgrep
команда была бы такой:grep -q ": Zip archive data"
но он (возможно) ложно обнаружит файлы с этой самой строкой в имени. В любом случае, настройте свой
grep
на то, что выfile
печатаете.find-sh
объясняется здесь:Какая вторая буква «ш» в словеsh -c 'some shell code' sh
?Команда не заботится об именах файлов (в Linux то, что вы называете «расширением», является просто частью имени файла). Она отвечает на вопрос, который вы задали в тексте поста («Как удалить все файлы, которые являются zip-файлами?»), а не на заголовок («Как массово удалить zip-файлыбез расширения").