Назад | Перейти на главную страницу

Как мне вырезать только имя файла из вывода ls -l?

Я в процессе объединение аудиофайлов ogg в большом количестве с помощью ffmpeg с использованием mylist.txt файл

Формат mylist.txt файл

file '/path/to/file1.wav'
file '/path/to/file2.wav'
file '/path/to/file3.wav'

Мой 'ls -l' выходной образец аудиофайлов WhattsAPP ogg похож на

-rw-rw-r-- 1 work work  64112 Nov 14 18:43 'WhatsApp Ptt 2019-11-11 at 10.19.18 AM.ogg'
-rw-rw-r-- 1 work work  24616 Nov 14 18:43 'WhatsApp Ptt 2019-11-11 at 10.19.50 AM.ogg'
-rw-rw-r-- 1 work work  26166 Nov 14 18:43 'WhatsApp Ptt 2019-11-11 at 10.20.18 AM.ogg'
-rw-rw-r-- 1 work work  69895 Nov 14 18:43 'WhatsApp Ptt 2019-11-11 at 10.21.05 AM.ogg'
-rw-rw-r-- 1 work work  85416 Nov 14 18:43 'WhatsApp Ptt 2019-11-11 at 10.27.09 AM.ogg'
  1. Как мне получить только 'WhatsApp Ptt 2019-11-11 в 10.19.18 AM.ogg' части каждой строки в 'ls -l' вывод с использованием вырезать, sed, awk или любой другой инструмент в файл с помощью одной команды?

  2. Как добавить ключевое слово "файл" перед всеми именами файлов в файле с помощью одной команды?

  3. Можно ли объединить процессы 1. и 2. в одну команду?

Содержимое окончательного файла должно выглядеть так:

file 'WhatsApp Ptt 2019-11-12 at 10.21.59 AM.ogg'
file 'WhatsApp Ptt 2019-11-12 at 10.29.45 AM.ogg'
file 'WhatsApp Ptt 2019-11-12 at 10.31.52 AM.ogg'
file 'WhatsApp Ptt 2019-11-12 at 9.31.38 AM.ogg'

Проще использовать glob вместо того ls работать со списком имён файлов

for f in *; do
  echo file \'$f\'
done

/ bin / ls -1

Это оставляет всю слизь :)

Проблема в том, что ls в большинстве дистрибутивов имеет псевдоним вроде «ls -la». Вы можете проверить это с помощью «alias ls» и посмотреть, появится ли что-нибудь

Также использование абсолютного пути (с / bin /) позволит избежать использования псевдонима.