Как массово удалить zip-файлы без расширения в Linux

Как массово удалить zip-файлы без расширения в Linux

У меня есть папка, полная разных файлов, но без расширения. Как удалить все файлы, которые являются 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-файлыбез расширения").

Связанный контент