В первую очередь: если Вы собираетесь быть использованием решений для попытки полная копия или копия подмножества изображений для предотвращения аварии.
Вы могли попробовать что-то вроде:
for folder in $(ls -l | awk '{print $9}');
do <magic here>;
done
Волшебство могло быть чем-то как использование identify
управляйте, доступно ли это Вам. Из того, что я читал, это может считать exif данные из изображений. На основе этого Вы могли, возможно, создать папку или переместить каталог и т.д. и т.д.
Это означает полные блоки размера bs
плюс дополнительные блоки с размером меньше bs.
pushd "$(mktemp -d)"
dd if=/dev/zero of=1 bs=64M count=1 # and you get a 1+0
dd if=1 of=/dev/null bs=16M # 4+0
dd if=1 of=/dev/null bs=20M # 3+1
dd if=1 of=/dev/null bs=80M # 0+1
_crap=$PWD; popd; rm -rf "$_crap"; unset _crap
# frostschutz's case
yes | dd of=/dev/null bs=64M count=1 # 0+1
Edit: в ответе frostschutz упоминается другой случай генерации неполных блоков. Стоит прочитать. See also https://unix.stackexchange.com/a/17357/73443.
Есть десятки стандартных утилит командной строки, которые могут зависать на дескрипторе и ждать ввода. Все они работают примерно так. dd
уникален тем, что может показать вам, как выглядит дескриптор прямо сейчас .
Лично я не совсем понимаю полезность опции GNU iflag = fullblock
. Я имею в виду, что вы можете просто cat
ввести свой ввод с такой же легкостью, не беспокоясь о размерах блоков ввода-вывода.
Но dd
может принимать часть потока - и он может делать это в read ()
/ write ()
границы относительно современной системы.
{ ( sleep 1 #don't write() til dd is definitely setup
printf 123 #write() 3 bytes
printf %-30s\\n 456 #write() 31 bytes
printf you\ there\? #write() 10 bytes
)| dd bs=64 count=2 conv=sync| #2 64 byte read()/write() \0-padded blocks
od -vtc #show it with octal radices
} 2>/dev/null #drop stderr
0000000 1 2 3 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000100 4 5 6
0000120 \n \0
0000140 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000160 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000200
dd
выполняет одно read ()
для каждого входного блока. Если файл, который он пытается read ()
, не содержит столько данных, сколько он запросил, это не имеет значения - один read ()
считается один блок ввода. Вот как это работает - это основная утилита dd
.
Когда он выполнил свою работу, dd
сообщает обо всех блоках ввода / вывода, с которыми он имел дело. Выполнение вышеуказанной команды снова, но на этот раз вместо stdout ...
dd: warning: partial read (3 bytes); suggest iflag=fullblock
0+2 records in
2+0 records out
128 bytes (128 B) copied, 1.00161 s, 0.1 kB/s
Каждый раз, когда dd
делал read (0, & in, 64),
read
возвращался короткое - потому что в его дескрипторе файла stdin не хватило байтов, ожидающих выполнения своего запроса, когда он его сделал. Итак, dd
read ()
0 полных входных записей и 2 коротких. Вот что означают эти отчеты.
Это («enable -n») является свойством bash-specific . Можно поместить
enable -n echo
в соответствующий сценарий инициализации оболочки, например, ~/.bashrc
, чтобы это повлияло на каждую вызываемую оболочку.
Это означает полные блоки с размером bs
плюс дополнительные блоки с размером меньше bs.
pushd "$(mktemp -d)"
dd if=/dev/zero of=1 bs=64M count=1 # and you get a 1+0
dd if=1 of=/dev/null bs=16M # 4+0
dd if=1 of=/dev/null bs=20M # 3+1
dd if=1 of=/dev/null bs=80M # 0+1
_crap=$PWD; popd; rm -rf "$_crap"; unset _crap
# frostschutz's case
yes | dd of=/dev/null bs=64M count=1 # 0+1
Изменить : в ответе frostschutz упоминается другой случай, чтобы создать неполные блоки. Стоит прочитать. См. также https://unix.stackexchange.com/a/17357/73443 .
-121--27054- 0 + b записи
для b > 1
обычно являются неполными при чтении из канала или другого источника, который не может предоставить bs = X
данных достаточно быстро. Можно заставить dd
ждать полных блоков данных, используя iflag = fullblock
. Этот параметр особенно полезен, если вы также используете count = X
, так как count также считает неполные блоки, так что это ненадежно без fullblock...