Команда Linux - самый последний несвязанный файл ссылок

Команда Linux: я использую следующую команду, которая возвращает последнее имя файла в каталоге.

ls -Art | tail -n 1

Когда я запускаю эту команду, она возвращает мне последний измененный файл, который на самом деле является мягкой ссылкой, я хочу игнорировать мягкую ссылку в своем результате и хочет получить имена файлов, отличные от мягкой ссылки, как я могу это сделать, если бы любая быстрая помощь была оценена.

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

rum-12.53.2.war

2 ответа

Решение

- Последний файл в каталоге без softlink

ls -ArtL | tail -n 1

- Последний файл без расширения

ls -ArtL | sed 's/\(.*\)\..*/\1/' | tail -n 1

Опция -L для ls разыменовывает ссылку, т.е. вместо ссылки вы увидите информацию о ссылке. Это то, что вы хотите? Или вы хотели бы полностью игнорировать ссылки?

Если вы хотите полностью игнорировать ссылки, вы можете использовать это решение, хотя я уверен, что существует более простое:

a=$( ls -Artl | grep -v "^l" | tail -1 )

aa=()
for i in $(echo $a | tr " " "\n")
do
    aa+=($i)
done

aa_length=${#aa[@]}

echo ${aa[aa_length-1]}

Сначала вы сохраняете вывод вашего ls в переменной с именем a. Подбирая "^l", вы выбираете только символические ссылки, а с параметром -v вы инвертируете этот выбор. Таким образом, у вас есть то, что вы хотите, но недостатком является то, что вам нужно использовать опцию -l для ls, так как в противном случае для "^l" не будет опущения. Итак, во второй части вы разделяете переменную a на " " и заполняете массив с именем aa (извините за неправильное именование). Тогда вам нужен только последний элемент в aa, который должен быть именем файла.

Другие вопросы по тегам