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