У Вас есть два набора проблем здесь:
Это обработает оба условия гладко, хотя Вы захотите изменить переменную IMAGE_TYPES, если Вы решите включать другие расширения также.
#!/bin/bash
shopt -s extglob
shopt -s nocaseglob
IMAGE_TYPES='jpg|png|gif'
IFS=$'\n' dirlist=(`find "$PWD" -type d`)
for dir in "${dirlist[@]}"; do
cd "$dir"
ls *.+($IMAGE_TYPES) > /dev/null 2>&1 || continue
counter=0
for file in *.+($IMAGE_TYPES); do
printf -v newname "%.3d.%s" $((counter += 1)) "${file##*.}"
mv --verbose "$file" "$newname"
done
done
Файл tar извлечен, пока он не находит маркер, указывающий на конец файла tar: Физически, архив состоит из ряда записей файла, завершенных к концу записи архива, который состоит из два 512 блоков нулевых байтов из описания формата файла tar здесь.
Таким образом, Ваш архивный файл, вероятно, имеет материал после маркера, который не становится извлеченным.
Это походит на диск, к которому Вы извлекаете, не имеет достаточного свободного пространства для всех файлов и каталогов в архиве tar. Свериться df -k .
в каталоге, в котором Вы извлекли файлы.
Иногда, если Вы будете смолить файлы с "дырами" в них, то Вы получите архивный файл tar, намного больше, чем исходный файл (файлы). Кроме того, архивный файл tar несет метаданные, имя файла, полномочия, владение, и т.д., а также данные файла (файлов). Таким образом, архив tar является неизменно, по крайней мере, немного более крупным, чем исходные файлы.