![Как массово удалить zip-файлы без расширения в Linux](https://rvso.com/image/1654367/%D0%9A%D0%B0%D0%BA%20%D0%BC%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20zip-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20%D0%B1%D0%B5%D0%B7%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20Linux.png)
У меня есть папка, полная разных файлов, но без расширения. Как удалить все файлы, которые являются 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-файлыбез расширения").