Linux Bash脚本需求:列出主目录内容及生成带日期的文本文件
解决Bash脚本生成空文件问题并实现需求
我来帮你搞定这个问题,先拆解下你原脚本里的几个问题:
ls /home/user/*/这个命令是只列出/home/user下所有子目录里的内容,如果user目录下没有子目录,或者子目录为空,这行就不会有输出- 你创建了带日期的文件
$today.list.txt,但根本没把ls的结果写入这个文件,只是用touch创建了空文件,所以它自然是空的!
正确的脚本(实现两项功能)
下面是能完成你需求的脚本,我会逐行解释:
#!/bin/bash # 定义主目录路径,方便后续修改 HOME_DIR="/home/user" # 获取当前日期,把冒号换成横线(冒号在部分文件系统里属于非法文件名字符,避免报错) TODAY=$(date '+%d-%m-%Y') # 列出主目录下所有文件和文件夹,同时写入带日期的文件 ls -l "$HOME_DIR" > "${TODAY}.list.txt"
脚本细节说明:
- 用
$HOME_DIR变量存储主目录,后续要改路径只需要修改这一行,更灵活 ls -l "$HOME_DIR"会列出/home/user目录下所有的文件和文件夹(包括根目录下的内容,不是子目录里的),然后通过重定向>写入到带日期的文件中- 如果想同时在终端输出内容,又写入文件,可以改用
tee命令:ls -l "$HOME_DIR" | tee "${TODAY}.list.txt"
单独将当前日期写入文本文件的脚本
如果只是需要把当前日期写入文件,有几种简单方式:
方式1:直接覆盖写入文件
#!/bin/bash date '+%d-%m-%Y' > date.txt
执行后date.txt里就会只有当前日期的内容。
方式2:追加到文件末尾(不覆盖原有内容)
#!/bin/bash # 追加带时间的日期到日志文件 date '+%d-%m-%Y %H:%M:%S' >> date_log.txt
用>>会把日期追加到文件最后,不会覆盖原有内容,我额外加了小时分钟秒的格式,你可以根据需求调整。
额外小提示
- 尽量用
$(command)代替反引号`command`,前者可读性更好,也支持嵌套使用 - 给变量和文件名加双引号,避免路径或文件名里有空格时出现错误
内容的提问来源于stack exchange,提问作者Jokamutta
相关产品推荐
相关产品推荐

