Подтвердить что ты не робот

Как выводить имена файлов, окруженные кавычками в строке SINGLE?

Я хотел бы вывести список элементов в папке следующим образом:

"filename1"  "filename2" "file name with spaces" "foldername" "folder name with spaces"

Другими словами, имена элементов должны быть в одной строке, окруженной кавычками (одиночными или двойными) и разделяемыми пробелами.

Я знаю, что

find . | xargs echo

выводит вывод в одной строке, но я не знаю, как добавлять кавычки вокруг каждого имени элемента.

Этот код является частью bsh script. Таким образом, решение может быть набором команд и использовать временные файлы для хранения промежуточного вывода.

Большое спасибо за любое предложение.

Приветствия, Ана

4b9b3361

Ответ 1

это должно работать

find $PWD | sed 's/^/"/g' | sed 's/$/"/g' | tr '\n' ' '

EDIT:

Это должно быть более эффективным, чем предыдущее.

find $PWD | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '

Решение @Timofey будет работать с tr в конце и должно быть наиболее эффективным.

find $PWD -exec echo -n '"{}" ' \; | tr '\n' ' '

Ответ 2

Вы также можете просто использовать find "-printf", например:

find . -printf "\"%p\" " | xargs your_command

где:

%p = file-path

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

Ответ 3

Попробуйте это.

find . -exec echo -n '"{}" ' \;

Ответ 4

Вы можете использовать параметр GNU ls --quoting-style, чтобы легко получить то, что вам нужно. На странице руководства:

--quoting-style=WORD

используйте стиль цитирования WORD для имен записей: literal, locale, shell, shell-always, shell-escape, shell-escape-always, c, escape

Например, используя команду ls --quoting-style=shell-escape-always, ваш выход будет выглядеть следующим образом:

'filename1' 'filename2' 'file name with spaces' 'foldername' 'folder name with spaces'

Используя --quoting-style=c, вы можете точно воспроизвести желаемый пример. Однако, если выход будет использоваться оболочкой script, вы должны использовать одну из форм, которая правильно экранирует специальные символы, такие как shell-escape-always.

Ответ 5

for f in *; do printf "'%s' " "$f"; done; echo

Или, благодаря Гордон Дэвиссон:

printf "'%s' " *; echo

Конечная echo - это просто добавить новую строку к выводу.

Ответ 6

EDIT:
Следующий ответ генерирует LIST вместо LINE вместо отдельной строки.

  • Я второй подозреваю, что OP использует результат для вызова другой команды
  • преобразование выходного СПИСОК в одну строку легко (| tr '\n' ' ')

Менее указанным методом является использование опции -d (--delimiter) xargs:

find . | xargs [email protected] -d"\n" echo \"@\" 

[email protected] фиксирует каждый результат find как @, а затем мы эхо из него цитируем

С помощью этого вы можете вызывать любые команды так же, как вы добавили кавычки к аргументам.

$ find . | xargs -d"\n" testcli.js
[ "filename1",
  "filename2",
  "file name with spaces",
  "foldername",
  "folder name with spaces" ]

См. fooobar.com/questions/33871/...

Ответ 7

    find . | sed "s|.*|\"&\"|"

Краткое описание:
Мы берем шаблон. * и помещаем его в кавычки.
Хороший источник - sed.

Подробное описание:
Шаблон: s/one/ONE/

  • s Заменить команду.
  • / Разделитель.
    В моем выражении "|" используется вместо "/" для предотвращения "гор", как в шаблоне s/.*/\"& amp;.\"/
  • один шаблон поиска шаблона регулярного выражения.
  • ОДИН Строка замены.
  • . * Означает любой символ, который повторяется неограниченное количество раз.
  • \ " Означает " себя.
  • & amp; Специальный символ, соответствующий найденному шаблону.

Ответ 8

попробуйте

ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '