如何删除目录中所有文件的内容

时间:2015-03-24 17:03:31

标签: linux bash solaris cp

/tmp/REPORTS下我有一百个文件。我想要做的是删除/tmp/REPORTS中每个文件的内容(不删除它们)。所以我尝试了以下内容,但是我收到了这个错误:

cp /dev/null /tmp/REPORTS/*

cp: Target /tmp/REPORTS/…..  must be a directory
Usage: cp [-f] [-i] [-p] [-@] f1 f2
      cp [-f] [-i] [-p] [-@] f1 ... fn d1
      cp -r|-R [-H|-L|-P] [-f] [-i] [-p] [-@] d1 ... dn-1 dn

如何清除目录中所有文件的内容?

4 个答案:

答案 0 :(得分:2)

假设您想要截断每个文件的内容,可以执行以下操作:

for file in /tmp/REPORTS/*; do > "$file"; done

这将清除目录中每个文件的内容。

正如gniourf_gniourf在上面的评论中所建议的那样,有一个GNU工具truncate也可以为你完成这项工作:

truncate --size 0 /tmp/REPORTS/*

这可能比手动循环文件更快。

答案 1 :(得分:1)

问题似乎是要求所谓的"安全擦除"。

虽然您不能cp /dev/null,但您可以获得有关使用dd的效果。这是一个用来说明的脚本:

#!/bin/sh
for name in $*
do
    test -h "$name" && continue
    test -f "$name" || continue
    blocks=`ls -s "$name" | awk '{print $1; }'`
    dd if=/dev/zero of="$name" count=$blocks
done

脚本

  • 检查以确保参数是常规文件。
  • 然后它会询问文件的的数量。
  • 最后,它使用dd从特殊设备/dev/zero复制0。

这取决于ddls具有相同的blocksize概念(似乎是这种情况)。它还假定文件系统不重新分配给定文件的块,即它们可以被可靠地就地覆盖。如果您想要更好的保证,还有其他解决方案,例如Secure Erase in UNIX

的讨论

答案 2 :(得分:0)


你可以用这个 删除

find /tmp/REPORTS/ -type f -name "*.*" -exec rm -rf {} \;

或将它们移动到您想要的位置 对于cp

find /tmp/REPORTS/ -type f -name "*.*" -exec cp {} \tmp\{} \;

对于mv

find /tmp/REPORTS/ -type f -name "*.*" -exec mv {} \dev\null \;

答案 3 :(得分:0)

请改为尝试:

$ find /tmp/REPORTS/ -type f -exec cat /dev/null > {} \;

如果您有大量文件,请尝试使用\+代替\;以获得更有效的命令行。