2013-02-26 2 views
1

Я уверен, выполнение ls-R /files/разборе Ls -R выход в переменную в Unix

я получил следующий вывод

./: nvision 
./nvision: layout 
./nvision/layout: abcd.txt 

Я ищу, чтобы получить путь в списке, как

/nvision 
/nvision/layout/ 
/nvision/layout/abcd.txt 

и я должен иметь возможность скопировать нужный путь к переменной

ps: Я не ищу NVISION Я пытаюсь получить список папок и файлов в files папке

может ли один помочь мне с этим

+1

Что вы пробовали? – m0skit0

+0

ls -lR я пытался, но я didnot получить то, что я хотел – gmhk

+3

использовать 'найти',' ls' по существу никогда не будет использоваться в скриптах, его выход предназначен для людей. – Mat

ответ

4

Вы пробовали использовать find(see reference)

Было бы так же просто, как find ., чтобы получить список файлов и папок внутри текущего каталога. Измените . к любому пути, чтобы получить список файлов и каталогов внутри этого пути:

nvision 
nvision/abcd.txt 
nvision/layout 

Чтобы сохранить его в переменной

var=`find .` 

и добавить начальную черту в каждой строке (при необходимости)

var=`find . -exec echo /{} \;` 

Здесь вар не имеет особого смысла, это просто имя переменной.

Для использования этой переменной вы можете использовать $var или ${var}. Например, чтобы распечатать или сохранить его в файл:

# Print the variable content 
echo $var 

# Save the content of var to a file 
echo $var > /tmp/file.txt 
+0

Если у вас есть GNU find, вы можете использовать '-printf' вместо' -exec echo'. Это позволяет начать процесс для каждого найденного файла. –

+0

У меня получилось, что find.exe настроен неправильно, и он выбирал windows find.exe, и теперь он терпел неудачу. Команда find wokring отлично – gmhk

2

Вы действительно должны использовать находку для таких вещей. Просто используйте find directory. Если вам требуется более конкретное форматирование вывода, вы можете использовать опцию find-printf. Найти действительно мощный инструмент, который также позволяет все виды фильтрации. Обязательно проверьте документацию для получения дополнительной информации: GNU FindUtils.

Чтобы сохранить результаты в переменной используя одну из следующих утверждений:

result=`find ...` 

или

result=$(find ...) 

Вы также можете использовать найти непосредственно выполнить команду для каждого матча, используя find «ю.ш. -exec опция. Опять же, не забудьте проверить документацию. Это действительно всеобъемлющий.

Update (пользователи Mac/UNIX - пользователи Linux не поражаются)

BSD find требует путь.Используйте

find . 

вместо просто

find 

, если вам требуется список всех файлов в рабочем каталоге.

1

хорошо ответ на всем протяжении этой страницы вы должны использовать находку в котором перечислены все найденные файлы лет можно определить

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

find .-type d -print 

в котором перечислены только каталоги или найти

или

find . -type f -print 

которые будут перечислены все файлы только

, если вы ищете как то

find . -print 

и если вы только хотите, чтобы определить уровень рекурсивного попробовать

find . -maxdepth 1 -print 

и вот сценарий

#!/bin/bash 
for names in $(find . -type f -print); do 
    echo $names 
done 
Смежные вопросы