好的,我创建了这样的脚本,它基本上从 MySQL 获取数据并将其存储为 CSV 文件,然后使用 sftp 将所有文件推送到另一台服务器。
所以我想创建一个这样的脚本,它基本上检查文件是否有任何内容。如果文件中没有内容,那么它基本上会在日志中放入“文件中没有内容”并将其删除,并在日志中添加“删除该文件”。
谢谢和问候,萨加尔
答案1
假设您想在当前目录及以下目录中查找空文件,请将它们的路径记录到名为的文本文件中empty.txt
,然后删除它们:
find . ! -path ./empty.txt -type f -empty -print -delete >empty.txt
这假设您有一个find
理解非标准-empty
和-delete
选项的实现。该命令避免删除empty.txt
我们正在登录的文件,否则会查找并删除空的常规文件,同时将其路径名输出到该empty.txt
文件。
您可以运行上面的命令而不执行任何操作,-print
以查看将删除哪些内容。
对于符合标准的变体:
find . ! -path ./empty.txt -type f -exec sh -c '
for pathname do
if [ ! -s "$pathname" ]; then
printf "%s\n" "$pathname"
rm -f "$pathname"
fi
done' sh {} + >empty.txt
这会为批量找到的文件调用一个简短的内联 shell 脚本。该脚本使用-s
test 测试每个路径名,看看它是否为空,如果是(-s
测试是真的如果它非空,这就是我们否定测试的原因),则打印出文件的路径名并使用rm -f
.
和以前一样,此输出保存到empty.txt
.
更短但效率较低的标准版本是
find . ! -path ./empty.txt -type f \
! -exec test -s {} \; -print -exec rm -f {} + >empty.txt
这会降低效率,因为它test
每个文件执行一次外部命令。
答案2
命令wc -l
计算文件行数。这可能是一个构建块:
lineCount=$(<$fileName wc -l)
if [ $lineCount -eq 0 ]; then
echo "File $fileName has no content"
fi