如何转换为零字节文件?

时间:2010-01-11 05:48:09

标签: unix shell command-line

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 个答案:

答案 0 :(得分:5)

是的,你可以。

试试这个

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'

答案 1 :(得分:2)

我无法立即想到tcsh的简单单行。

这是一个三线:

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

您可以在命令行中键入此内容,即它不必是脚本。不幸的是,对于单行目的而言,与sh系列不同,csh派生的shell按行解析控制结构,而不是通过管道。这意味着foreach i (*); echo $i; end无效。

当然,你可以通过切换一行的shell来做一行:

sh -c 'for i in *; do cat /dev/null > $i; done'

答案 2 :(得分:1)

for file in *
do
   [ -f "$file" ] && >"$file"
done

答案 3 :(得分:0)

对于一个文件,您可以使用

>file.cpp

对于多于一个,您需要一个for循环,如其他人已经描述的那样。如果当前目录中有目录,则会重新发送错误消息。

for f in *;do >$f;done

避免这种使用

for f in *;do [ -f $f ] && >$f;done