DamianLewis
@DamianLewis

Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

В заголовке только один вопрос, но был бы рад, если сможете ответить сразу на несколько вариаций данного вопроса.
  1. Как в Windows, через cmd удалить из папки все файлы, кроме выбранных?
  2. Как в Windows, через cmd удалить из папки все файлы, размер которых меньше 5мб?
  3. Так же интересует, как сделать описанное в 1-м и в 2-м вопросе на системах Linux
  • Вопрос задан
  • 2312 просмотров
Решения вопроса 3
@rPman
в linux bash есть инструмент указания файлов для параметров любых утилит, запускаемых.
например если написать myapp *.txt то в командную строку myapp улетит список txt фалов.

Конкретно по задаче, чтобы удалить все файлы исключая указанные, то можно использовать следующую запись:
rm -f !(file.txt|data.dat)

Для удаления файлов, размер которых больше определенного, можно использовать find (его вообще рекомендуется для многих задач использовать, например исключить каталоги из поиска можно с помощью директивы -not):
find . -type f -size +5M -exec rm -f {} +

upd. для windows cmd все грустнее, на столько издевательски неудобного языка еще поискать нужно, штатно утилит которые бы позволили искать файлы и запускать код по заданной команде на сколько я занаю нет, можно написать цикл for и уже в его теле делать проверки, если имя неравно такому то или размер не больше... можешь не помечать ответом, мне просто лень да и проверить негде уже
нужные команды if, for /? и set /? там будут исчерпывающие примеры
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
Как в Windows, через cmd удалить из папки все файлы, размер которых меньше 5мб?

forfiles /S /M * /C "cmd /c if @fsize LSS 5000000 DEL @path"

С указанием пути не работает

forfiles /S /P папка_тут /M * /C "cmd /c if @fsize LSS 5000000 DEL @path"
Ответ написан
@res2001
Developer, ex-admin
Набросаю схематично вариант без forfiles.
Имеем текстовый файл file.txt со списком имен файлов, которые не надо удалять - одно имя файла на каждой строке.
Получить список всех файлов в каталоге можно с помощью dir /b
Далее этот список отфильтровать, исключая файлы, содержащиеся в file.txt, примерно так:
dir /b c:\test\* | findstr /v /g:file.txt
На выходе по идее должен быть список файлов, которые надо удалить.
Эту команду запихнуть в
for /f "tokens=* delims=" %%a in ('dir ... ^| findstr ...') do (del %%a)

В принципе все.
Проверить все сейчас не могу, т.к. под рукой нет винды, поэтому только общая идея, компоновать придется самому.
За подробностями:
dir /?
for /?
findstr /?
del /?

Рекомендую сначала выполнить связку dir | findstr вручную в консоли и добиться, что бы выдавался нужный результат (список файлов для удаления), только затем все это оформлять в батник.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@voleg4u
http://www.voleg.info/
man find
Ответ написан
Комментировать
В общем случае - написать скрипт. Для cmd всё несколько замороченнее, и намного меньше возможностей и много ограничений. Но можно из него вызвать powershell и передать ему скрипт-блок с нужными командами.
В линуксе аналогично - выполняется на bash, но можно ведь вызвать ещё массу разных инструментов, которых уйма под линукс.
Если нужен однострочник - вторую точно можно сделать однострочником и в винде и в линуксе (гуглить за Вас не стану, это просто). В первой задаче много нюансов - файлы или папки, вложенные они или нет, и сколько их задано - одно дело когда десяток, другое когда сотни тысяч исключений. И подходы к решению будут немного разные.

А вообще, это похоже не на вопрос ("меньше/больше 5мб" - определитесь уже), а на задание в какой-то лабе. Тогда это не сюда.
Ответ написан
@Zzzz9
Чем и как выбраны?
удалить из папки все файлы, кроме выбранных
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы