Как сбросить размер метаданных папки без повторного создания папки?

У меня есть папка ( watch ), которая по ошибке заполняется множеством временных файлов. Я очистил все эти файлы, но папка все еще имеет размер 356 кБ. Раньше я переместил папку в сторону, создал новую папку с тем же именем и скопировал все файлы в нее, чтобы вернуть ее до прежнего небольшого размера. Есть ли способ вернуть его к небольшому размеру без повторного создания папки?

 drwxr-xr-x 2 apache apache 4096 Nov 29 2014 details drwxr-xr-x 2 apache apache 364544 Jan 21 17:24 watch drwxr-xr-x 3 apache apache 4096 Jan 21 17:19 settings 

watch имеют два небольших файла: .htaccess и index.php.

У меня файловая система ext4.

e4fsck поддерживает флаг -D который, кажется, делает то, что вы хотите:

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

Конечно, вам нужно отключить файловую систему для использования fsck , что означает время простоя для вашего сервера.

Вы хотите использовать параметр -f чтобы убедиться, что e4fsck обрабатывает файловую систему, даже если она чиста.

Тестирование:

 # truncate -s1G a; mkfs.ext4 -q ./a; mount ./a /mnt/1 # mkdir /mnt/1/x; touch /mnt/1/x/{1..4000} # ls -ld /mnt/1/x drwxr-xr-x 2 root root 69632 Nov 22 12:54 /mnt/1/x/ # rm -f /mnt/1/x/* # ls -ld /mnt/1/x drwxr-xr-x 2 root root 69632 Nov 22 12:55 /mnt/1/x/ # umount /mnt/1 # e2fsck -f -D ./a e2fsck 1.43.3 (04-Sep-2016) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 3A: Optimizing directories Pass 4: Checking reference counts Pass 5: Checking group summary information ./a: ***** FILE SYSTEM WAS MODIFIED ***** ./a: 12/65536 files (0.0% non-contiguous), 12956/262144 blocks # mount ./a /mnt/1 # ls -ld /mnt/1/x drwxr-xr-x 2 root root 4096 Nov 22 12:55 /mnt/1/x/ 

Ответ на ваш вопрос для всех практических целей нет . ext4 не обрезает каталоги, поэтому вам нужно их воссоздать. Вы можете улучшить свою предыдущую технику, перемещая, а не копируя файлы в новый каталог, это, вероятно, будет намного быстрее и только изменит время работы файлов.

Если подкаталогов нет, вы можете даже использовать ln для жесткой привязки файлов в новый каталог.

Linux имеет системный вызов renameat2 который можно использовать для обмена двумя именами, поэтому, полагая, что у вас нет подкаталогов, вы можете создать новый каталог, связать файлы со старыми и новыми, а затем поменять старые и новые каталоги. Быстрый google придумал https://gist.github.com/eatnumber1/f97ac7dad7b1f5a9721f в качестве примера кода для вызова renameat2.

Конечно, все это только данные, поэтому вы можете использовать что-то вроде debugfs или даже dd для редактирования структур данных непосредственно на диске. Я бы не предложил пойти по этому маршруту ради 360 Кбайт пространства.

используя vim вы можете «отредактировать» каталог. удаление всех, кроме ./ и ../ должно «сбросить» метаданные папок

Каталог загрузок – 12k

vim Downloads/

 " ============================================================================ " Netrw Directory Listing (netrw v150) " /home/harry/Downloads " Sorted by name " Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$ " Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec " ============================================================================ ../ ./ Documents/ LeapDeveloperKit_2.3.1+31549_linux/ Leap_Motion_Installer_Packages_release_public_linux/ Moderncv Casual/ OneDrive-2015-11-24/ Resume/ g13-gui/ jpegs/ markdown-notes-linux-x64/ pebble_js_tutorial_1_1/ pios/ teamviewerqs/ xampp-linux-x64-5.6.14-4-installer.run* .swo 1452760968416.jpg 1a412bb33cb0a60077579b8bc13b2237.log.gz .... 

Вот пример каталога, который является обычным 4k vim Videos/

 " ============================================================================ " Netrw Directory Listing (netrw v150) " /home/harry/Videos " Sorted by name " Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$ " Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec " ============================================================================ ../ ./ EnVyUs vs NiP, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group B-O3pBF-3KmzM.mp4 The Tek 0201 - Is USA Like Nazi Germany-zrOo8LzvKvc.mp4 The Tek 0203 - YT Red, EU Net Neutrality Trouble, Drones Taking Jobs-IEdUcjBGyEw.mp4.part The Tek 0204 - Logan's Favorite Episode of the Year-iga7kB1NhKY.mp4 VP vs TSM, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group A Winners Match-3jfepl5Of0o.mp4 .swp 

Я понимаю, что каталоги под Linux (или * Nix) являются просто «специальными» файлами, которые могут хранить информацию о файлах, которые живут «ниже». Я обнаружил, что в моей системе только vim мог это сделать, используя nano или другие, просто показав пустой файл, я думаю, что он читает вещи по-другому

Вот хороший вопрос stackexchange, который отвечает, какие папки (каталоги) находятся под Linux. Как каталоги реализуются в файловых системах Unix?