Внешний монитор USB не работает

Если вы не против того, чтобы все было перемещено отдельно:

#! /bin/bash
for ((i = 1; ; i++))
do
    mkdir -p target-$i
    for j in $(seq $((i*7 - 6)) $((i*7)))
    do
        mv -t "target-$i" "source/image$j.tiff" || exit 1
    done
done

Или, более кратким:

find source -type f -name 'image*.tiff' -print0 | \
  sort -z --version-sort | \
  xargs -0n7 bash -c 'TARGET=target-$((${1//[^0-9]/} / 7 + 1)); \
    echo mkdir -p "$TARGET"; \
    echo mv -t "$TARGET" "$@"' move-7

Объяснение:

-print0 печатает имена файлов, разделенные символом NUL (\0). Это самый безопасный способ передачи имен файлов в качестве вывода в другие команды. sort с -z ищет вход с нулевым разграничением, а сортировка версии позволяет безопасно сортировать номера переменной длины, так что image2.tiff до image119.tiff xargs может ограничить количество аргументов, применяемых к каждой команде с -n, поэтому здесь мы используем -n7. [F13] для ввода с нулевым ограничением. Мы извлекаем фактор числа первого аргумента $((${1//[^0-9]/} / 7 + 1)) - ${1//[^0-9]/} удаляет все в аргументе, который не является числом. Целочисленное деление гарантирует, что мы получим коэффициент. Это должно быть быстрее, так как мы выполняем ровно число mv s.

Осмотрите полученные команды, и если они выглядят нормально, запустите его снова после удаления echo s.

KasiyA имеет интересную модификацию.

]

интересная модификация приносит rename на ум. Во-первых, сделайте все каталоги:

FILES=(source/image*.tiff)
COUNT=${#FILES[@]}
DIR_NUM=$((COUNT / 7 + 1))
seq 1 $DIR_NUM | xargs bash -c 'mkdir -p "${@/#/target-}"'

rename -n 's;source/image(\d+)\.tiff$;"target-".int($1 / 7 - 1)."/image".$1.".tiff";e' source/image*.tiff

На самом деле мы могли бы применить первые четыре строки ко всем решениям здесь и пропустить повторную mkdir -p.

0
задан 21 September 2017 в 17:58

0 ответов

Другие вопросы по тегам:

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