Получите доступ к последнему файлу (в алфавитном порядке) в каталоге

Вы хотите, чтобы все Ваши фотографии были 6x4 с шириной 1 024, правильно? Это означает, что они должны быть 683 пикселя высотой.

Если это корректно, что Вы ищете...

convert <input_image> -resize 1024x683^ -gravity center -extent 1024x683 <output_image>

... где Вы заменили бы именем файла изображения, Вы хотите изменить размер, и с новым именем файла.

Это обрежет края, чтобы соответствовать аспекту и изменить размер их к 1024x683. Это сделает маленькие изображения больше, а также создание больших изображений меньший для установки размеру.

 

Когда Вы захотите изменить размер всех изображений в каталоге, необходимо будет записать быстрый сценарий удара, который был бы похож...

#!/bin/bash

for f in *.[jJ][pP][gG]
do
    echo $f
    convert $f  -resize 1024x683^  -gravity center  -extent 1024x683  print_$f
done

Вы затем просто делаете исполняемый файл сценария. (Скажите сохранение сценария как rename.sh Вы работаете chmod u+x rename.sh.) Затем Вы запускаете скрипт ./rename.sh который изменит размер всех изображений в том же каталоге.

3
09.12.2011, 22:30
4 ответа

Это - действительно задание для zsh.

vim my_dir/*(om[1])

Биты в круглых скобках являются спецификаторами шарика. * прежде регулярный шаблон шарика, например, если бы Вы хотели рассмотреть только файлы журнала, то Вы могли бы использовать *.log. o спецификатор шарика изменяет порядок, в котором отсортированы соответствия; om вид средств ко времени изменения, новому сначала. [ спецификатор шарика означает только возвращать некоторые соответствия: [1] возвращает первое соответствие, [2,4] возвратите следующие три, [-2,-1] возвратите последние два и так далее. Если файлы имеют имена, которые начинаются с их метки времени, *([1]) будет достаточен.

В других оболочках нет никакого хорошего способа выбрать новый файл. Если Ваши имена файлов не содержат непечатные символы или новые строки, можно использовать

vim "$(ls -t mydir | head -n 1)"

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

set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"
3
27.01.2020, 21:20
  • 1
    супер как, если это означает upvote :-) –  Nikhil Mulley 09.12.2011, 22:41

Это работает на меня:

$ ls -rt | tail -1 | xargs vim

Но у Вас может быть каталог как последняя запись, в этом случае Вы могли бы хотеть отфильтровать каталоги:

$ ls -rt | grep -v "^d" | tail -1 | xargs vim
1
27.01.2020, 21:20

Если Вы внутри my_dir:

vim $(ls -rt | tail -1)
0
27.01.2020, 21:20
  • 1
    Лучше инвертировать сортировку и добавить кавычки: vim "$(ls -t | head -1)" –  enzotib 09.12.2011, 17:39

Я предполагаю, что Вы ищете это.

[centos@centos temp]$ for i in `seq 100`; do touch $i; done

[centos@centos temp]$ ls -t1 | head -1
100


[centos@centos temp]$ vim /.my_dir/$(ls -t1  | head -1)

Но сортировка зависит полностью от Вашего имени файла.

0
27.01.2020, 21:20

Теги

Похожие вопросы