очистка файлов в каталоге в Linux - PullRequest
2 голосов
/ 16 августа 2010

Я хочу очистить все файлы в каталоге в Linux (не удаляя их, только очистить их содержимое)

Мне нужно сделать это в C.

Ответы [ 4 ]

3 голосов
/ 16 августа 2010
  • scandir, чтобы перечислить их, затем для каждого файла:
  • fopen(, w+)
  • fstat чтобы получить размер
  • fwrite весь файл с нулями? (это то, что вы подразумеваете под ясным?)
  • fclose

Хороший вариант оболочки: shred -z directory/*

3 голосов
/ 16 августа 2010

На самом деле, вам действительно не нужно делать это в C. В UNIX есть инструменты, которые могут выполнить почти любую задачу, которую вы хотите.

find . -type f -exec cp /dev/null {} ';'

Этот конкретный фрагмент выше найдет все файлы в текущем каталоге и попытается скопировать на него пустое устройство, эффективно обрезая файл до 0 байт.

Вы можете изменить начальный (верхний уровень) каталог, ограничитьимена (например, -name '*.jpg') и даже ограничивают его текущим каталогом (без подкаталогов) с помощью -maxdepth 0.

. Есть много других опций с find, которые вы можетеобнаружить, введя man find в командной строке.Просто не вводите его в Google, вы можете получить больше, чем вы рассчитывали: -)


Если необходимость использования C является абсолютно необоротной, я бы все еще сделать это так, но с:

system ("find . -type f -exec cp /dev/null {} ';'");

Я не заинтересован в переписывании программного обеспечения, которое кто-то уже приложил кучу усилий для предоставления бесплатно: -)


Если, по моему совету, вы все еще хотите сделать это нелегко, вам нужно взглянуть на opendir, readdir и closedir для обработки каталогов, затем просто используйте fopen в режиме записи, затем fclose для каждого файла-кандидата.

Есливы хотите перемещаться по целым структурам каталогов, а не только по текущему каталогу, вам придется определять каталоги из readdir и, вероятно, проходить через них.

3 голосов
/ 16 августа 2010

В Баш:

for i in directory/*; do > $i; done

Это сохранит владение и права доступа к файлу.

Не выполняйте работу в C! Если это домашнее задание, отметьте его как таковое.

2 голосов
/ 16 августа 2010

Вы можете открыть файл в режиме записи, а затем закрыть его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...