5

Я хочу простой список файлов в каталоге, который не является моим текущим каталогом. Я запускаю ls /other/directory/*.txt и получаю:

/other/directory/file1.txt
/other/directory/file2.txt

Я хочу:

file1.txt
file2.txt

Как я могу получить второй список?

5 ответов5

13

(cd /other/directory && ls)

3

Есть ли какая-то причина, по которой вы не можете использовать ls -1 ?

$ ls -1 /other/directory
file1
file2

РЕДАКТИРОВАТЬ:

Я заметил, что вы изменили вопрос сейчас - мое решение не будет работать с вашим новым примером ls /other/directory/*.txt . Вместо этого используйте что-то вроде решения Хачика , например

$ (cd /other/directory && ls -1 *.txt)
1

1) я не уверен, что это не должно быть на superuser.com

2) ls все равно не печатает полный путь: ls -1 /your/dir

Редактировать Вопрос изменился. Согласно комментарию Павла ниже, я обновляю свой ответ. Вы можете сделать это так:

ls -1 /home/rich/*.txt | sed s/^.*\\/\//

Это минус 1, а не л, хотя я тоже работает. Объяснение: ls -l/-1 записывает имена файлов с вещами, которые вам не нужны. Каждая строка проходит через sed, который здесь выполняет подстановку, как указано в s/. Подстановка принимает форму:

s/text/replacement/

Мы заменяем все от начала строки ^ до последнего / (/ - это специальный символ, поэтому мы должны экранировать его \\/) ничем - то есть удалить его и, таким образом, оставить только имя файла.

1

ls -1 /other/directory/*.txt |xargs basename

  • -1 будет перечислять один файл в строке только с именем файла (или путем)
  • Использование подстановочного знака и / или указание ls полного пути выведет полный, абсолютный путь для каждого файла. basename путь, оставив вас только с именем файла.
0
for i in `ls /some/directory` ;do basename $i;done

Выражение в `` распространяется на файлы, затем каждый из них передается в basename. Предостережение: не работает с файлами, содержащими пробелы!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .