Команда 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, который должен быть именем файла.