Я хочу, чтобы очистить все файлы в директории на Linux (не deleteing их, только очистить их содержание)очистки файлов в директории в Linux
мне нужно сделать это в C.
Я хочу, чтобы очистить все файлы в директории на Linux (не deleteing их, только очистить их содержание)очистки файлов в директории в Linux
мне нужно сделать это в C.
Вы можете открыть файл в режиме записи, а затем закройте его.
как я получаю все файлы в каталоге в C – nis
На самом деле, вы действительно сделать не необходимости делать это в 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 {} ';'");
Я не заинтересован в повторном написании программного обеспечения, что кто-то уже положило bucketload усилий на обеспечение свободного :-)
Если после мой совет, вы еще хотите сделать это трудным путем, вам нужно посмотреть opendir
, readdir
и closedir
для обработки каталогов, а затем просто используйте fopen
в режиме записи, за которым следует fclose
для каждого файла-кандидата.
Если вы хотите перемещаться по целым структурам каталогов, а не только с текущим каталогом, вам придется обнаруживать каталоги от readdir
и, вероятно, проходить через них.
В Bash:
for i in directory/*; do > $i; done
Это сохранит право собственности и права доступа к файлу.
Не делайте раковины в C! Сохраните огромное количество времени, используя лучший инструмент для работы. Если это домашнее задание, отметьте его как таковое.
scandir
перечислить их, а затем для каждого файла:fopen(, w+)
fstat
, чтобы получить размерfwrite
весь файл с нулями? (Это то, что вы имеете в виду ясно?)fclose
Хороший вариант оболочки будет: shred -z directory/*
Просто 'scandir()', за которым следует 'truncate (filename, 0)' в каждом файле, сделает трюк. – caf
Ну ... зависит, если вы хотите, чтобы это было сложно (er), чтобы восстановить, тогда написание данных на месте здраво. В противном случае да, просто 'truncate()' или более стандартное соответствие 'fopen (file," w ") + fclose()' будет делать трюк. – domen
Это не повлияет на появление файловых систем с копированием на запись, хотя;) – caf
Что означает "чистая" означает? – adamk