如何删除目录下所有文件的内容
How to delete the contents of all the files in a directory
在/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
如何清除目录下所有文件的内容?
你可以使用这个
删除
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 \;
假设您的意思是要截断每个文件的内容,您可以这样做:
for file in /tmp/REPORTS/*; do > "$file"; done
这将清除目录中每个文件的内容。
正如 gniourf_gniourf 在上面的评论中所建议的那样,有一个 GNU 工具 truncate
也可以为您完成这项工作:
truncate --size 0 /tmp/REPORTS/*
这可能比手动循环文件更快。
问题似乎是在询问所谓的 "secure erase"。
虽然您不能 cp /dev/null
,但您可以使用 dd
获得您所询问的效果。这里有一个脚本来说明:
#!/bin/sh
for name in $*
do
test -h "$name" && continue
test -f "$name" || continue
blocks=`ls -s "$name" | awk '{print ; }'`
dd if=/dev/zero of="$name" count=$blocks
done
剧本
- 检查以确保参数是一个常规文件。
- 然后它会询问文件的块数。
- 最后,它使用
dd
从特殊设备/dev/zero
复制0。
这依赖于 dd
和 ls
具有相同的块大小概念(看起来确实如此)。它还假定文件系统不会为给定文件重新分配块,即它们可以可靠地就地覆盖。如果你想要更好的保证,还有其他解决方案,例如 Secure Erase in UNIX
的讨论
试试这个:
$ find /tmp/REPORTS/ -type f -exec cat /dev/null > {} \;
或者如果您有大量文件,请尝试使用 \+
而不是 \;
以获得更高效的命令行。
在/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
如何清除目录下所有文件的内容?
你可以使用这个
删除
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 \;
假设您的意思是要截断每个文件的内容,您可以这样做:
for file in /tmp/REPORTS/*; do > "$file"; done
这将清除目录中每个文件的内容。
正如 gniourf_gniourf 在上面的评论中所建议的那样,有一个 GNU 工具 truncate
也可以为您完成这项工作:
truncate --size 0 /tmp/REPORTS/*
这可能比手动循环文件更快。
问题似乎是在询问所谓的 "secure erase"。
虽然您不能 cp /dev/null
,但您可以使用 dd
获得您所询问的效果。这里有一个脚本来说明:
#!/bin/sh
for name in $*
do
test -h "$name" && continue
test -f "$name" || continue
blocks=`ls -s "$name" | awk '{print ; }'`
dd if=/dev/zero of="$name" count=$blocks
done
剧本
- 检查以确保参数是一个常规文件。
- 然后它会询问文件的块数。
- 最后,它使用
dd
从特殊设备/dev/zero
复制0。
这依赖于 dd
和 ls
具有相同的块大小概念(看起来确实如此)。它还假定文件系统不会为给定文件重新分配块,即它们可以可靠地就地覆盖。如果你想要更好的保证,还有其他解决方案,例如 Secure Erase in UNIX
试试这个:
$ find /tmp/REPORTS/ -type f -exec cat /dev/null > {} \;
或者如果您有大量文件,请尝试使用 \+
而不是 \;
以获得更高效的命令行。