2011-11-28 3 views
0

На моей Linux машине у меня есть дерево каталогов, как это:Найти подкаталоги с командой поиска

rootDir 
|--123456789 
| |-- test 
| |-- live 
| 
|--234456789 
| |-- live 
| 
|--454354334 
    |-- test 

И я должен был бы найти все Корневые директории, которые имеют как каталоги («тест», и " live "), а затем удалите" тест "один. Я хотел бы сделать это с помощью одной строки, если это возможно.

+0

Итак, я полагаю, вы пробовали это сделать и застряли где-то. Какова ваша конкретная проблема? – Miquel

+0

'найти. -maxdepth 2 -name "test" -exec rm -rf {} \; 'будет удалять все dir named test в текущем каталоге и два уровня вниз ... часть вашего вопроса, в которой нужно искать оба каталога, - это (мне) трудно представить в одной строке. Когда вы задаете такие вопросы, всегда говорите, что вы пробовали. –

+0

Спасибо за советы! Я знаю, как удалить все эти «тестовые» каталоги с помощью команды find, но моя проблема заключается в том, что я должен удалить их только в каталоге, где у меня есть «тест» и «живой». Поэтому простой один вкладыш кажется слишком сложным. Я пытался сделать это с помощью труб, но не имел успеха. –

ответ

3
find <directory_name> -type d -exec sh -c "cd {} && [ -d live ] && [ -d test ] && echo \"Deleting test from {}\" && rm -rvi test " {} \; 

echo не является обязательной. vi опции добавлены в rm, чтобы сделать это подробным & interactive
Когда вы сказали delete test one, я принимаю только тестовый каталог.
Но если вы хотите удалить родительский каталог, который содержит как то попробуйте

find <directory_name> -type d -exec sh -c "cd {} && [ -d live ] && [ -d test ] && cd ../ && echo \"Deleting {}\" && rm -rvi {} " {} \; 

Надеется, что это помогает!

+0

Спасибо за ответ! Я немного изменил свои потребности, поэтому он работает следующим образом: find -maxdepth 1-type d -exec sh -c "cd {} && [-d test] && [-d live] && rm -rvf test" { } \; –

Смежные вопросы