Удалить файлы определенного типа, сохранить дерево каталогов

В прошлый раз, когда я должен был совместно использовать интернет-соединение на ноутбуке с мобильным телефоном Android, я встретился с подобными проблемами: Ваш Android может или не может распознать Специальную сеть.

В конце мне удалось создать Точку доступа горячей точки с помощью wifi-hostapd-ap, GUI для создания точки доступа WiFi на основе Hostapd. Я должен был отключить DNS в NetworkManager к , избегают wifi-hostapd-ap, отказывающего , все же.

См. также:

3
задан 20.05.2020, 01:08

3 ответа

Вы можете использовать команду find. Эти команды предназначены для запуска из внутри каталога, в котором хранятся ваши файлы .xls и .doc (и другие каталоги). НЕ запускайте это в своем домашнем каталоге!

Самый простой способ сделать это - удалить все файлы не-xls и не-doc (ОСТОРОЖНО, эта команда удалит все остальные файлы):

find ./ -type f -not -name "*.xls" -and -not -name "*.doc" -exec rm {} \;

Затем вы можете использовать это, чтобы найти и удалить пустые каталоги. Чтобы избежать использования потенциально очень разрушительного rm -rf, это удаляет один уровень за раз, вам, возможно, придется запустить его несколько раз, чтобы удалить все пустые каталоги:

find ./ -type d -empty -exec rmdir {} \;

См. этот вопрос [114 ] для получения более подробной информации о том, что делает поиск и как его использовать.

8
ответ дан 20.05.2020, 01:08

Это должно сделать все сразу:

find path/to/dir '!' -iname "*.doc" '!' -iname "*.xls" -empty -delete

(За исключением того, что у ваших папок есть такие расширения, как .xls или doc ...)

Заменить -delete на [ 114], чтобы увидеть, что удаляется первым.

3
ответ дан 20.05.2020, 01:09

Это требует некоторого довольно причудливого синтаксиса rsync, но это можно сделать:

rsync -r --filter="+ */" --filter="+ **/*.xls" --filter="+ **/*.doc" --filter="- **" --prune-empty-dirs /path/to/source/ /path/to/target/

Демонстрация:

me@banshee:/tmp$ find source
source
source/1.xls
source/1
source/1/2
source/1/2/2.xls
source/1/1.doc
source/lol.crapfile

me@banshee:/tmp$ find target
target

me@banshee:/tmp$ rsync -r --filter="+ */" --filter="+ **/*.xls" --filter="+ **/*.doc" --filter="- **" --prune-empty-dirs source/ target/

me@banshee:/tmp$ find target
target
target/1.xls
target/1
target/1/2
target/1/2/2.xls
target/1/1.doc
2
ответ дан 20.05.2020, 01:10
  • 1
    Как правило, было бы лучше включать эти комментарии как редактирование к Вашему сообщению – Robert Longson 20.05.2020, 01:10
  • 2
    ПРИМЕЧАНИЕ - выше копий файлы из источника для предназначения при сохранении структуры каталогов в целости; это делает не , удаляют их из источника (это - операция копии, не операция пересылки). – Robert Longson 20.05.2020, 01:10
  • 3
    ПРИМЕЧАНИЕ 2 - этот answer' s OP' s первое предложение " I' m пытающийся переместить набор .doc и .xls файлов, которые хранятся в наборе папок и подпапок к новому location" . Это делает не ответ OP' s фактический вопрос, который был, по-видимому, как удалить все , но те файлы, скопировав всю структуру в новое местоположение. – Bastiaan Linders 20.05.2020, 01:11

Теги

Похожие вопросы