【发布时间】:2016-07-26 23:14:40
【问题描述】:
我的目标是在目录中最后修改文件的秒数。
我的目录名称中有空格,想用脚本stat 它。使用终端,我只需使用:
sudo stat -c %Y /var/www/pre/data/jko/files/My\ Files
并且完美运行。
在我的bash 脚本中,我从目录/var/www/pre/data/jko/files/ 中一一读取文件(这是在while 循环中)
touch tempFile.txt
#ls sort by last modified date
sudo ls -rt /var/www/pre/data/$line/files/ > tempFile.txt
# read newest file
outputFile=$(tail -1 tempFile.txt)
# replace all spaces with "\ " sign
outputFile=$(echo ${outputFile// /"\ "})
outputDirectoryToFile=/var/www/pre/data/$line/files/$outputFile
echo $outputDirectoryToFile
expr `sudo date +%s` - `sudo stat -c %Y $outputDirectoryToFile`
如果我用bash script.sh 触发这个脚本,我得到了
/var/www/pre/data/jko/files/My\ Files //line from echo
stat: cannot stat '/var/www/pre/data/jko/files/My\': No such file or directory
stat: cannot stat 'Files': No such file or directory
expr: syntax error
或者也许有更简单的解决方案
【问题讨论】:
-
引用它:
sudo stat -c '%Y' "/var/www/pre/data/jko/files/My Files" -
创建文字引号(数据中的引号)决不能替代缺少的句法引号(代码中的引号)。它们是完全不同的两件事。
-
顺便说一句,请参阅mywiki.wooledge.org/ParsingLs --
ls不应以编程方式使用。 -
...BashFAQ #3,mywiki.wooledge.org/BashFAQ/003,描述了有关查找最新/最旧/等的最佳实践。文件。
-
...所以,整个
${outputFile// /"\ "}事情完全被误导了。删除它,并添加缺少的引号 - shellcheck.net 是一个出色的静态检查器(您可以下载并在本地安装),除其他外,它将查找脚本缺少正确性所需的引号的地方。