2011-02-06 2 views
1

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

У меня есть каталог, содержащий некоторые dotfiles (они, вероятно, .git, но может быть легко .svn и, возможно, даже что-то еще) и некоторые нетопливные файлы. Я ищу общую функцию, которая будет перечислять все подкаталоги этого каталога, кроме те, которые начинаются с периода ..

Я думаю, что это какой-то вариант find . -type d, но я попробовал несколько заклинаний и подошел коротко.

Что-то вроде

def find_files(listing, dir): 
    for entry in listdir(dir): 
     if isdir(entry) and does_not_begin_with_dot(entry): 
      listing.append(entry) 
      find_files(listing, entry) 

(Удивленно никто не спросил это - может быть, есть более Баш-иш так, что я не вижу?)

ответ

4
find . -type d | grep -v '/\.' 

... или ...

find . -type d -a ! -name '.?*' -o -name '.?*' -a ! -prune 
+0

Wont 'find -type d -a! -name '.? *' -o! -ручье? –

2

Дайте это попробовать:

find . -mindepth 1 -name '.*' -prune -o \(-type d -print \) 
0

Я не уверен, если это то, что вы хотите, но рекурсивно список всех подкаталогов в Баш я обычно делаю что-то вроде

ls -R | grep/

работает намного быстрее, чем некоторые находят варианты я пробовал. Недостатком является то, что с использованием ls я получаю дополнительный двоеточие в конце, но это не относится ко мне.

// edit Хорошо, я попробовал найти другие ответы отсюда, и они работают довольно быстро ... но их сложнее запомнить, чем ls. :)

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