2013-04-02 2 views
1

Я используюКак получить последнее имя файла в каталоге?

ls -ltr /homedir/mydirectory/work/ |tail -n 1|cut -d ' ' -f 10 

Но это очень грубый способ получения желаемого result.And также его ненадежным. Выход лажу просто выполнение

ls -ltr /homedir/mydirectory/work/ |tail -n 1 

является

-rw-r--r-- 1 user pusers 1764 Apr 1 12:06 firstfile.xml 

Так вот я получаю имя файла. Но если выход на выполнении указанной выше команды, как

-rw-r--r-- 100 user pusers 1764 Apr 1 12:06 firstfile.xml 

первая команда не! И понятно, как я сокращаю результат от 10-го символа, который сейчас недействителен.

Так, как его доработать.

+0

ли «последний» означает файл из которых дата модификации является наиболее недавнее? – 2013-04-02 05:58:20

+0

Да. это означает, что. Я хочу только имя файла – R11G

ответ

3

Зачем использовать флаг -l для ls, если он вам не нужен? Make ls просто выводит имена файлов, если вам не нужна дополнительная информация, вместо того, чтобы пытаться «разобрать» его не-унифицированный вывод (изнасилование плохих утилит обработки текста ...).

LAST_MODIFIED_FILE=`ls -tr | tail -n 1` 
+0

Но я хочу имя файла. Это требование. Итак, нужно было использовать «разрез» – R11G

+1

@ R11G Нет, вы этого не делаете. Как вы думаете, '' 'выдает, если не имена файлов, серьезно? Вы даже пробовали решение, которое я предлагал вообще? – 2013-04-02 06:12:42

+0

Да. Я пробовал это только. Путаница, которую я все еще имею, похожа на то, что второй столбец (количество жестких ссылок на этот файл/каталог) находится в двух/трехзначных цифрах - моя более ранняя команда, в которой я использую «разрезать», чтобы получить ТОЛЬКО имя файла, не удастся. Как преодолеть это? – R11G

1

Если вы действительно хотите, чтобы достичь этого, используя свой метод, то используйте AWK вместо вырезать

ls -ltr /var/log/ |tail -n 1| awk '{print $9}' 
Смежные вопросы