LINUX.ORG.RU

Как подставить переменную в аргумент команды?

 , , ,


0

1

Нужно удалить самый новый файл. Нашел как выводить имя этого файла, записал в переменную, но последняя команда(find) не срабатывает. Если вручную ввести аргумент имени, к примеру file1 все в порядке. Что я делаю не так?

sefi=$(find ./lab2 -type f -printf ‘%f \n’ | sort -r | head -n 1 )

echo $sefi find ./lab2 -name «$sefi» -exec rm -f {} ; #-type f -printf ‘%f \n’

Ответ на: комментарий от Siborgium

я не знаю как использовать разметку(я недавно тут). Я спросил что я делаю не так, а не «напишите за меня пожалуйста код». К слову, я думаю ты бы вложился в 1 предложение, если бы хотел помочь, а не поговорить. Есть вопрос как использовать переменную параметром и почему у меня не вышло. Попытка разобраться как раз и описана выше. Мне вообще вот не помогли твои претензии, веришь нет?

hateallpeople ()
Ответ на: комментарий от hateallpeople

Правила разметки: markdown или lorcode.

По теме: find ты прописываешь неверно. Структура файлов у тебя такая:

./lab2/file1
./lab2/file2
./lab2/file3

В $sefi же остается лишь file1, который будет искаться в рабочей директории, где его не окажется, ведь он-то лежит в ./lab2. Кроме того, ты сортируешь не файлы, а их лишь названия, причем по алфавиту, а не по времени создания.

Решение короткое и простое, но я его не дам. Посоветую не мучаться с find, а прочитать man по ls.

Siborgium ★★★ ()
Последнее исправление: Siborgium (всего исправлений: 4)
Ответ на: комментарий от hateallpeople

Ты же сам сказал, что не требуешь готового. А благодарности я и не просил.

Если нужно удалить самый новый файл среди всех поддиректорий.

$ rm $(find -type f | xargs ls -t | head -n 1)

Если нужно удалить самый новый файл из директории DIR

$ rm DIR/"$(ls -t DIR | head -n 1)"
Siborgium ★★★ ()
Последнее исправление: Siborgium (всего исправлений: 2)
Ответ на: комментарий от Siborgium

Не, ну спасибо. Я уже не буду собачиться, забыли, но это правда не вся лаба, а лишь 10%. И я считаю, что не стыдно спросить такое. Я же показал свое решение личное, а потом спросил уже «почему не выходит».

hateallpeople ()