Команда для удаления всех файлов из папок, соответствующих имени рекурсивно?

У меня есть базовая папка (назовем ее базовой).

У меня внутри куча папок, разбросанных по разным глубинам внутри этих папок, это кеш-папки.

Я хочу удалить все файлы из папок кеша, но не сами папки.

Я пробовал

cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*

Но на самом деле я только догадываюсь, какой будет правильная команда?

4
задан 9 July 2012 в 14:59

31 ответ

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 25 July 2018 в 18:09

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление шаблонов

8
ответ дан 2 August 2018 в 00:23

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 4 August 2018 в 15:52

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 6 August 2018 в 00:30

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 7 August 2018 в 17:55

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 10 August 2018 в 06:45

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

8
ответ дан 15 August 2018 в 18:39

Это будет рекурсивно удалять все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему будут неповрежденными, но все файлы в каждом из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 25 May 2018 в 08:51

Вы можете использовать чрезвычайно мощную команду find.

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это вам. Найти это имя приложения, у него много вариантов, но для вас вам не понадобится много.

. означает просмотр в этом текущем каталоге. Это означает, что вам нужно будет в правильном каталоге, чтобы начать с. Я полагаю, что для вас это ~

-iname означает поиск моего нечувствительного к регистру имени.

*cache* означает, что имя должно содержать кеш.

[d7 ] Теперь важна следующая часть.

-ok означает выполнение следующих команд, но как меня, если я хочу сделать это в первую очередь. Это можно заменить на -exec, но я бы не советовал.

Хорошо, так что следующая строка (это то, что работает -ok), это rm -rf {} \;

[F10] Надеюсь, я сам объясню. [F11] в основном является заполнителем имени файла, который он нашел. [[12] в конце просто означает, что это конец этой строки.

Надеюсь, что это имеет смысл.

Я советую запустить команду find без права и в том числе [ f13]. Сначала он выкачивает список всех файлов кеша, и вы сможете их просмотреть. Затем добавьте раздел -ok и взломайте!

1
ответ дан 25 May 2018 в 08:51
  • 1
    Вы забыли указать шаблон для -iname; что приведет к ошибкам, если в текущем каталоге будут файлы, соответствующие этому шаблону. Кроме того, этот подход также удаляет каталоги кэша, а не только содержимое. – geirha 9 July 2012 в 15:06
  • 2
    Это позволит удалить все папки с именем cache, включая файлы в них. OP хочет удалить файлы в папках с именем cache, а не в самих папках – Flint 9 July 2012 в 15:18

Просто замените baseir на путь базового каталога, который вы хотите удалить.

$ find basedir -type f -delete

Если вы чувствуете себя более комфортно, перемещаясь ранее в ваш базовый каталог, тогда:

$ cd basedir
$ find . -type f -delete
1
ответ дан 25 May 2018 в 08:51

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 25 July 2018 в 18:09

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 25 July 2018 в 18:09

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 25 July 2018 в 18:09

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 2 August 2018 в 00:23

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 2 August 2018 в 00:23

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 2 August 2018 в 00:23

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 4 August 2018 в 15:52

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 4 August 2018 в 15:52

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 4 August 2018 в 15:52

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 6 August 2018 в 00:30

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 6 August 2018 в 00:30

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 6 August 2018 в 00:30

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 7 August 2018 в 17:55

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 7 August 2018 в 17:55

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 7 August 2018 в 17:55

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 10 August 2018 в 06:45

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 10 August 2018 в 06:45

Вы можете использовать чрезвычайно мощную команду поиска .

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас , Find - это имя приложения, у него много опций, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что для вас ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это первым. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам об этом, и вы этого не хотите.

Хорошо, поэтому следующая строка (это материал, который запускает -ok): rm -rf {} \;

Надеюсь, rm -rf говорит само за себя. {} в основном является заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

1
ответ дан 10 August 2018 в 06:45

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
3
ответ дан 15 August 2018 в 18:39

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вам удобнее переходить ранее к вашему базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
1
ответ дан 15 August 2018 в 18:39

Другие вопросы по тегам:

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