Как преобразовать файл с нулевым байтом? - PullRequest
0 голосов
/ 11 января 2010

HI

в unix есть количество файлов в моем каталоге. Я хочу изменить все файлы на файлы нулевого байта. это возможно в одной командной строке?

например:

-rw-r--r--   1 sumanma  dev          434 Jan  8 14:36 pprbc_NL.cpp
-rw-r--r--   1 sumanma  dev          488 Jan  8 14:37 pprbc_TreeBuild.cpp
-rw-r--r--   1 sumanma  dev          783 Jan  8 14:37 pprbc_UPDwm.cpp

я хочу изменить их на

-rw-r--r--   1 sumanma  dev          0 Jan  8 14:36 pprbc_NL.cpp
-rw-r--r--   1 sumanma  dev          0 Jan  8 14:37 pprbc_TreeBuild.cpp
-rw-r--r--   1 sumanma  dev          0 Jan  8 14:37 pprbc_UPDwm.cpp

Я использую tcsh

Ответы [ 4 ]

5 голосов
/ 11 января 2010

Да, вы можете.

Попробуйте это

for i in *
do
 echo -n > $i
done

(Предполагается, что bash здесь, но основная идея - эхо).

Редактировать : один вкладыш (bash). Вам понадобятся точки с запятой и т. Д., Которые вам не понадобятся в многострочной версии.

 for i in * ; do echo -n > $i ; done

Редактировать : Если вы застряли, используя tcsh, вы всегда можете вызвать bash для запуска одного лайнера, например

 bash -c 'for i in * ; do echo -n > $i ; done'
2 голосов
/ 11 января 2010

Я не могу сразу придумать простой однострочник для tcsh.

Вот три лайнера:

foreach i (*)
  cat /dev/null > $i
end

Вы можете ввести это в командной строке, то есть это не обязательно должен быть скрипт. К сожалению, для целей одной строки, и в отличие от серии sh, оболочки, полученные из csh, анализируют управляющие структуры по линиям, а не по конвейеру. Это означает, что foreach i (*); echo $i; end не будет работать.

Конечно, вы можете сделать однострочник, переключив оболочки на строку:

sh -c 'for i in *; do cat /dev/null > $i; done'
1 голос
/ 11 января 2010
for file in *
do
   [ -f "$file" ] && >"$file"
done
0 голосов
/ 15 января 2010

Для одного файла вы можете использовать

>file.cpp

Для более чем одного вам нужен цикл for, как уже описано другими. Если в текущем каталоге есть каталог, вы получите сообщение об ошибке.

for f in *;do >$f;done

, чтобы избежать этого использования

for f in *;do [ -f $f ] && >$f;done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...