Лучший способ работать через / отображает дерево изображений, отсортированных по размеру

Сохраните свой / домой на отдельном разделе. Таким образом, это не будет перезаписано, когда Вы переключитесь на другой дистрибутив или обновите свой текущий. Это - также хорошая идея иметь Вашу подкачку на ее собственном разделе. Но это должно быть сделано автоматически установщиком Вашего дистрибутива.

Путем мой ноутбук является установкой, у меня есть следующие разделы:

/ 
/home 
/boot 
swap 
4
02.01.2011, 04:41
3 ответа

Тот размер как в размере файла или размере как в размерах изображения?

В zsh, для наблюдения всех .png файлы в текущем каталоге и его подкаталогах, отсортированных путем увеличения размера файла:

echo **/*.png(oL)

Нет никакого удобного спецификатора шарика для захвата каждый файлы N. Вот цикл, который устанавливает массив $a содержать каждый 50-й файл (запускающийся с самого большого).

a=() i=0
for x in **/*.png(OL); do
  ((i%50)) || a+=$x
  ((++i))
done
my-favorite-image-viewer $a

Без zsh или GNU находят, нет никакого простого способа отсортировать find произведенный метаданными (существует find -ls или find -exec ls или find -exec stat, но они не могли бы работать с файлами, содержащими непечатаемые символы, таким образом, мне не нравится рекомендовать им). Вот способ сделать это в Perl.

find . -name '*.png' |
perl -e '
    $, = "\n";  # separate elements by newlines in the output
    print  # print…
        sort {-s $a <=> -s $b}  # …sorted by file size…
            map {chomp;$_} <>  #…the input lines (with the newline bitten off)
'

И вот способ просмотреть каждый 50-й файл (запускающийся с самого большого):

find . -name '*.png' |
perl -e '
    $, = "\n";
    exec "my-favorite-image-viewer",
        map {$i++ % 50 ? () : $_}  # every 50
            sort {-s $b <=> -s $a} map {chomp;$_} <>
'

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

mkdir tmp && cd tmp
i=1000000  # the extra 1 on the left ensures alignment
for x in ../**/*(oL); do
    ((++i))
    ln -s $x ${i#1}.png
done

С Perl:

mkdir tmp && cd tmp
find .. -name '*.png' |
perl -e '
    $, = "\n";
    for $x (sort {-s $a <=> -s $b} map {chomp;$_} <>) {
        symlink $x, sprintf("%06d", ++$i);
    }
'
6
27.01.2020, 20:53
  • 1
    Friggin потрясающий и всесторонний ответ - Спасибо! –  radven 02.01.2011, 19:47

Просто объединение find искать *.png, ls или stat получить размер файла, sort к виду размером файла и awk распечатать только каждую 50-ю строку.

0
27.01.2020, 20:53

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

Однако вот одно решение с помощью GNU find, sort, cut и awk- в основном набор инструментов, что предложенный alex:

$ find -iname "*.png" -exec ls -s {} + | sort -n | cut -d" " --complement -f1 | awk '{ if ( NR % 50 == 0 ) print}' | xargs -d"\n" eog

Здесь я использовал глаз гнома (eog) как программа просмотра изображений, главным образом потому что это был один из некоторых, я мог найти, что берут несколько параметров командной строки, и делает что-то разумное с ним.

Я уверен, что мог удалить sort и cut в пользу еще некоторых awk код. Чтобы быть абсолютно честным, я не уверен, как это решение будет взаимодействовать с пробелом.

0
27.01.2020, 20:53

Теги

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