Как получить имя файла с помощью UNIX? - PullRequest
0 голосов
/ 15 февраля 2012

Мне нужно получить имя файла из каталога для обработки файла в моей системе UNIX.В каталоге будет только один файл, и его имя будет динамически меняться (с помощью неназванной внешней методологии).

Пожалуйста, дайте мне знать, как это можно сделать.

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Если есть только одно имя файла, которое не начинается с ., то:

filename="$(ls $directory)"

Это захватывает вывод ls. Из-за ограничения «один файл», это безопасно, даже если имя содержит символы новой строки, пробелы, табуляции или что-то еще. С несколькими файлами парсинг вывода ls проблематичен.

Если вы хотите указать путь, а не просто имя файла, вы можете использовать:

filename=$directory/*

Опять же, это безопасно только из-за ограничения «один файл». Невозможно использовать это, чтобы различить «в каталоге есть один файл с его именем *» и случай ошибки «в каталоге вообще нет файлов». С ls, если строка пуста, файл отсутствует.

Если имя файла может начинаться с ., тогда жизнь намного сложнее; вы, вероятно, используете:

filename=$(cd $directory; basename "$(find . -type f)")

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

0 голосов
/ 15 февраля 2012
for fn in *
do
  filename="$fn"
done
...