Мне нужно получить рекурсивный список каталогов в Linux только с именем каталога и файла. Он должен включать все файлы, включая скрытые, за исключением файлов с именем ".svn".

Я пробовал несколько комбинаций команды «ls» и не мог понять. При использовании «ls –R direname / grep –v / $» я получаю заголовок каталога, за которым следует двоеточие, которое я не могу использовать.

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

test
test/.filehidden1
test/file2
test/file3.txt
test/test2.log
test/test2/file.hidden1
test/test2/file2.boo
test/test2/file3.boo2

Обратите внимание, что косая черта в передней части отсутствует

0
user3151788 27 Ноя 2016 в 05:06

4 ответа

Лучший ответ
find . -name .svn -prune -o -print

-prune указывает ему не спускаться ни в какие подходящие каталоги.

1
poolie 27 Ноя 2016 в 02:53

Мне нужно получить рекурсивный список каталогов в Linux только с именем каталога и файла. Он должен включать все файлы, включая скрытые, за исключением файлов с именем ".svn".

Хотите получить список файлов в репозитории Subversion? Это сделает именно это:

svn ls -R

Если нет, то вы можете использовать find:

find . ! -path '*/.svn/*' ! -name .svn

Вы упомянули «Обратите внимание, что косая черта в начале не используется». Если это очень важно, то команду find можно перефразировать так:

find * .[^.]* ! -path '.svn/*' ! -name .svn
0
janos 27 Ноя 2016 в 08:19

Это должно сделать:

find . ! -path \*.svn\*

Это сообщает find рекурсивно перечислить все файлы из ., путь которых не содержит .svn. Это не идеально, так как может скрыть, например, файл foo.svnbar.

1
YSC 27 Ноя 2016 в 02:19

Что-то вроде этого:

find DIRNAME ! -name .svn
0
John Zwinck 27 Ноя 2016 в 02:19