bash - файл - linux перенаправление вывода в dev null




Используя результат команды в качестве аргумента в bash? (5)

Используйте обратные шаги для замены результата команды:

ls > "`pwd`.txt"

Как указал Ландон, $(cmd) эквивалентен:

ls > "$(pwd).txt"

Обратите внимание, что необработанная подстановка pwd является абсолютным путем, поэтому приведенная выше команда создает файл с тем же именем в том же каталоге, что и рабочий каталог, но с расширением .txt . Томас Каммейер отметил, что команда basename разделяет ведущую директорию, поэтому это создаст текстовый файл в текущем каталоге с именем этого каталога:

ls > "`basename "$(pwd)"`.txt"

Также благодаря erichui для решения проблемы пробелов на пути.

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

ls > list.txt

Я хотел бы использовать результат команды pwd (print working directory) для имени списка воспроизведения.

Что-то вроде:

ls > ${pwd}.txt

Это не работает - может ли кто-нибудь сказать мне, какой синтаксис мне нужно использовать, чтобы сделать что-то вроде этого?

Изменить: Как уже упоминалось в комментариях, pwd закончит тем, что даст абсолютный путь, поэтому мой плейлист будет называться .txt в каком-то каталоге - d'oh! Поэтому мне придется обрезать путь. Спасибо, что заметили это - я, наверное, потратил бы время на то, чтобы узнать, куда мои файлы пошли!


Используя вышеописанный метод создаст файлы на один уровень выше вашего текущего каталога. Если вы хотите, чтобы все списки воспроизведения переходили в один каталог, вам нужно сделать что-то вроде:

#!/bin/sh

MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt

Чтобы сделать буквально то, что вы сказали, вы можете попробовать:

ls > `pwd`.txt

который будет использовать полный путь, что должно быть хорошо. Обратите внимание: если вы сделаете это в своем домашнем каталоге, который может быть в / home / hoboben, вы будете пытаться создать /home/hoboben.txt текстовый файл в каталоге выше.

Это то, что вы хотели?

Если вы хотите, чтобы каталог содержал файл с именем после него, вы получили бы базовое имя текущего каталога и добавили его с .txt в pwd.

Теперь вместо использования команды pwd ... почему бы не использовать переменную среды PWD?

Например:

ls > $PWD.txt

или

ls > ${PWD}.txt

вероятно, вы пытались вспомнить со своим вторым примером.

Если вы находитесь в / home / hoboben и хотите создать /home/hoboben/hoboben.txt, попробуйте:

ls > ${PWD}/${PWD##*/}.txt

Если вы сделаете это, файл будет содержать свое имя, поэтому чаще всего вы исправляете это одним из нескольких способов. Вы можете перенаправить в другое место и перенести файл или называть файл, начинающийся с точки, чтобы скрыть его от команды ls, если вы не используете флаг -a (а затем, возможно, переименуете результирующий файл).

Я пишу свои собственные скрипты для управления иерархией каталогов музыкальных файлов, и я использую подкаталоги с именем «.info», например, для хранения данных треков в некоторых резервных файлах (в основном, я «скрываю» метаданные таким образом). Это работает хорошо, потому что мои потребности просты, а моя коллекция небольшая.


Это эквивалентно решению обратного хода:

ls > $(pwd).txt

убрать все, кроме имени каталога

ls >/playlistdir/${PWD##/*}.txt

это, вероятно, не то, что вы хотите, потому что тогда вы не знаете, где находятся файлы (если вы не измените команду ls)

заменить "/" на "_"

ls >/playlistdir/${PWD//\//_}.txt

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

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

ext=.mp3 #leave blank for all files
for FILE in "$PWD/*$ext"; do echo "$FILE";done >/playlistdir/${PWD##/*}.txt




command-line