Linux: перечислить содержимое подкаталогов с указанным именем?

6681
Dane O'Connor

Я использую Linux для анализа структуры каталогов Windows. Структура является:

/Documents and settings /username1 /My Documents ... /username2 /My Documents ... ... 

Какую команду можно выполнить, чтобы содержимое (и вложенные папки) всех каталогов «Мои документы» были перечислены следующим образом:

/Documents and Settings/username1/My Documents/filename /Documents and Settings/username1/My Documents/subdir/filename /Documents and Settings/username2/My Documents/filename 

В основном существует множество пользователей, но почти ни у кого нет ничего в их папке «Мои документы». Я просто хочу найти и показать содержимое тех пользователей, у которых есть документы.

РЕДАКТИРОВАТЬ: Каждый каталог "имя пользователя" содержит много подкаталогов. Я только хочу перечислить дерево ниже папки «Мои документы», но сделать это для всех имен пользователей одновременно.

1

6 ответов на вопрос

2
KeithB

Объединяя первые два ответа, используйте find и ls -R:

найти "/ Documents and settings" -name "Мои документы" -exec ls -R {} \;

Это найдет все каталоги « Мои документы» и перечислит все, что находится под ними, с полными путями. Вам нужны кавычки, так как в именах каталогов есть пробелы.

Изменить: объяснение того, как это работает. Он начинается с / Documents and settings и ищет любой файл или каталог, который соответствует моим документам . Для каждого, который он находит, он заменяет путь на {} в ls. \; означает конец команды.

Что значит {} \; имею в виду? Dane O'Connor 14 лет назад 0
эта команда выдает: «отсутствует аргумент для -exec» Dane O'Connor 14 лет назад 0
Убедитесь, что у вас есть \; (точка с запятой) KeithB 14 лет назад 0
Ах, как только вы объяснили, я заметил, что между '{}' и '\;' не было пробела. Отлично. Я предполагаю, что '\;' это для предотвращения расширения оболочки ';'? Dane O'Connor 14 лет назад 0
Стреляй, это список всего содержимого документов и настроек Dane O'Connor 14 лет назад 0
2
iddqd

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

find "/Documents and settings" -name "My Documents" -exec tree -f -i --noreport {} \; 
1
linux_is_for_desktop
ls -R path_to_your_dir 

или же

ls -lR path_to_your_dir 

для лучшего обзора

Тем не менее, лучший вид достигается с

find path_to_your_dir 

ПРИМЕЧАНИЕ: -R означает рекурсивный

посмотрите мое редактирование, мне нужно только дерево под каждой папкой моих документов. Не дерево под Документы и Настройки. Dane O'Connor 14 лет назад 0
0
lyarwood

Вы можете использовать команду # find your_dir

посмотрите мое редактирование, мне нужно только дерево под каждой папкой моих документов. Не дерево под Документы и Настройки. Dane O'Connor 14 лет назад 0
0
wallenborn

Если вы хотите увидеть путь и не хотите иметь полный рекурсивный список -R, это, похоже, делает примерно то, что вы хотите, хотя это немного неуклюже:

find . -type d -name '*Documents' ! -empty | (while read d; do echo $d; ls -la $d; done) 
0
nagul

Если вы хотите получить рекурсивный список файлов и папок в разделе « Документы и настройки» / «Пользователь» / «Мои документы» :

find Documents\ and\ Settings/*/My\ Documents -print 

Если вам нужны только файлы и папки непосредственно в разделе «Документы и настройки» / «Пользователь» / «Мои документы»:

ls -dr Documents\ and\ Settings/*/My\ Documents/* 

Первый будет содержать файл, такой как « Документы и настройки» / «Пользователь» / «Мои документы» / dir1 / file1), тогда как второй будет содержать список только « Документы и настройки» / «Пользователь» / «Мои документы» / dir1 ».