Я думаю, что Вы забежали вперед немного — в то время как многие люди могут согласиться, что Уэйленд имеет лучший дизайн в течение современной эры (хотя некоторые все еще не соглашаются даже относительно того), реализация еще не закончена, и он еще не делает всего, должен был настигнуть X, и при этом приложения и инструментарии не готовы к нему. Этой осенью Уэйленд, как ожидают, объявит свой API, стабильный так, чтобы инструментарии могли начать портировать, не имея необходимость волноваться о несовместимых изменениях, повреждающих их порт, в то время как разработчики Уэйленда продолжают работать над битами, все еще должен был изложить в деталях рабочий стол.
Ведущий разработчик Уэйленда сделал доклад и демонстрацию на Конференции X.Org Developer в сентябре 2012, покрыв текущее состояние и происходящую работу все еще - можно или прочитать сводку или следить за видеозаписью.
Существует много символов в именах файлов, которые сделали бы тот сбой. Можно улучшить его с:
#! /bin/sh -
cd /home/pi/JPGS || exit
fn=$(ls -t | head -n1)
mv -f -- "$fn" /home/pi/WWW/webpic.jpg
Отъезд переменной закрыл кавычки в контексте списка (в оболочках кроме zsh
) split+glob оператор, Вы почти никогда не хотите сделать это. --
отмечает конец опций так "$fn"
не будет взят в качестве опции, если она запустится с -
.
Это все еще перестало работать, если имена файлов содержат символы новой строки, но не пространство, вкладку, звезду, вопросительный знак, правую квадратную скобку, или запускаются с тире.
Лучше всего должен использовать zsh
здесь:
#! /bin/zsh -
mv -f /home/pi/JPGS/*.jpg(.om[1]) /home/pi/WWW/webpic.jpg
(.om[1])
спецификаторы шарика, они - a zsh
определенная функция. .
ограничивает шарик регулярными файлами (не будет включать символьные ссылки, каталоги, устройства...), om
должен заказать на времени изменения, и [1]
только взять первый файл.
Обратите внимание что, если бы Вы хотите присвоить это переменной оболочки, которая должна была бы быть переменной типа массив:
fn=(/home/pi/JPGS/*.jpg(.om[1]))
(не, что это имеет большое значение о том, как Вы используете его позже).
Вы могли инвертировать логику на ls
немного.
$ ls -t | head -n1
-t sort by modification time, newest first
Теперь это обнаруживается сначала, таким образом, мы можем использовать head
возвратить первый результат.
Примечание: Вы могли также отсортировать список ко времени изменения (ctime), хотя Вы, вероятно, собираетесь хотеть использовать, изменяют время выше - (mtime). ctime является прошлым разом, когда метаинформация состояния файла была изменена.
-c with -lt: sort by, and show, ctime (time of last modification of
file status information) with -l: show ctime and sort by name
otherwise: sort by ctime, newest first
Например:
$ ls -tc | head -n1
Чтобы сделать перемещение более чисто, Вы захотите перенести имя файла в двойные кавычки.
$ mv -f -- "$fn" /home/pi/WWW/webpic.jpg
Это будет работать в большинстве случаев, существует горстка легальных имен файлов, где это не будет, например, файлы с новыми строками. Но они, хотя законный, редко когда-либо намеренно используются.
mtime
(который отражает время изменения содержания файла), а не ctime
(который отражает время изменения метаданных также).
– Stéphane Chazelas
22.12.2013, 00:05
-t
опция также: ls -tc
к виду на времени inode-изменения (и ls -lc
отобразить время inode-изменения, и ls -ut
к виду на времени доступа),
– Stéphane Chazelas
22.12.2013, 00:20
mv
команда в случаях, где существуют пробелы в именах файлов.
– slm♦
22.12.2013, 00:57
Чтобы назначить самый последний файл с суффиксом jpg
, где бы он ни находился, переменной оболочки:
fn = $ (найдите .jpg | xargs ls -rt | tail -1)
Благодаря функции поиска это быстро, даже если у вас большое количество файлов. Главный недостаток: не учитываются файлы, измененные с момента последнего обновления базы данных локации.
Еще один недостаток: работает некорректно при отсутствии файла с .jpg
(из-за ls).
Наверное, я бы использовал find, так как он более общий. я только что столкнулся с вариант этого, определяющий новейший исполняемый файл, но он появляется в других местах. Команда поиска,
find.. -printf "%T@ %p\n" -type f | sort -g
должен быть достаточно гибким и работать с любыми именами файлов. Измените путь и критерии, как вам нужно, а затем завершите вывод.
Хотя я признаю, что в моем случае я закончил,
EXIF=`ls -t \`which -a exiftool \` | awk '{print $1}' `
which -a setup
/home/scripts/setup
/home/scripts/lat/scripts/setup
/home/documents/latex/scripts/setup
marchywka@happy$ ls -t `which -a setup `
/home/scripts/setup /home/documents/latex/scripts/setup /home/scripts/lat/scripts/setup
marchywka@happy$ ls -alt `ls -t \`which -a setup \` `
-rwxrwxrwx 1 root root 897 Oct 8 17:54 /home/scripts/setup
-rwxrwxrwx 1 root root 166 Sep 13 13:50
/home/scripts/lat/scripts/setup
-rwxrwxrwx 1 root root 163 Jan 27 2019 /home/documents/latex/scripts/setup
--
и почему zsh предпочтительный по удару здесь? Я также не уверен(.om[1])
делает. – Levon 21.12.2013, 23:57mv $f xx
который является неправильным синтаксисом и плохой практикой (и куда большинство связанных с оболочкой уязвимостей прибывает из), ноmv -- "$f" xx
– Stéphane Chazelas 22.12.2013, 15:58--
который явно важен с точки зрения безопасности также - еще раз спасибо – Levon 22.12.2013, 16:13