ls -s
сообщает количество блоков, которые выделяются для файла, не включая то, что хранится непосредственно в записи каталога.
В большинстве случаев количество блоков является числом байтов, разделенных на размер блока в байтах, окруженных.
Количество блоков может быть меньше, чем это для редкого файла. Например, в большинстве файловых систем, это создаст 8 192-байтовый файл, охватывающий 0 блоков:
$ perl -e 'truncate STDOUT, 8192' >a
$ ls -l a
-rw-r--r-- 1 gilles gilles 8192 Nov 1 21:32 a
$ ls -s a
0 a
С другой стороны количество блоков может быть больше, если файловая система предварительно выделяет блоки для файлов или использует блоки для хранения метаданных. Я не удивлен, что Zfs имеет неочевидную корреспонденцию между размером файла и количеством блоков, учитывая большое количество функций, которые он предлагает и его ориентация на большие файловые системы; я не знаю детали, но количество блоков зависит не только от размера файлов, но также и на его истории (у Вас может быть больше чем один блок в пустом файле, если это - результат усечения большего файла).
Объяснить почему ls -s
является неправильным: это не считает размер файла, но зависимое от файловой системы количество. Это - очень косвенный способ определить, пуст ли файл во-первых, требуя внешнего инструмента (ls
) и некоторый парсинг; вместо этого, они должны использовать test -s
, который не требует никакого парсинга и выполняет точно, что требуют. Если они думают это ls -s
хороший путь состоит в том, чтобы протестировать, пуст ли файл, бремя должно быть на них для выравнивания по ширине этого, это работает.
Не переименовывайте каталоги баз данных непосредственно. Вместо этого разгрузите базу данных, создайте новое имя базы данных (который, в свою очередь, создаст новое имя каталога), и затем выведите базу данных назад на новое имя базы данных:
mysqldump -u username -p olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql
После того как Вы проверили, что база данных функциональна, можно отбросить datase:
mysqladmin -u username -p drop oldatabase.
Посмотрите здесь для ссылки.
В Вашем случае Вы, вероятно, хотите создать tmp базу данных, вывести db_1 базу данных в ту временную базу данных, отбросить и воссоздать db_2 базу данных, затем вывести db_2 базу данных в недавно пустую db_1 базу данных.
Ну, это просто перемещает файлы, таким образом, ничто сложное - всего команда на 3 мВ
#!/bin/bash
mkdir /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/cars* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/customers* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_2/* /var/lib/mysql/db_1_temp
Но она, если Вы планируете использовать новую базу данных, Вы более обеспечены с созданием нового пустого дб и затем используете mysqldump для импортирования таблицу, Вам нужно.