【发布时间】:2015-01-05 18:54:31
【问题描述】:
我正在使用 bash 和 awk 执行以下操作,以获取可能空间已满的文件名、冒号、文件大小。 (第 5 列包含空格分隔的大小,第 9 列是 EOL 文件名):
src="Desktop"
echo "Constructing $src files list. `date`"
cat /dev/null > "$src"Files.txt
find -s ~/"$src" -type f -exec ls -l {} \; |
awk '{for(i=9;i<=NF;i++) {printf("%s", $i " ")} print ":" $5}' |
grep -v ".DS_Store" | grep -v "Icon\r" |
while read line ; do filespacesize=`basename "$line"`; filesize=`echo "$filespacesize" |
sed -e 's/ :/:/1'`
path=`dirname "$line"`; echo "$filesize:$path" >> "$src"Files.txt ;
done
而且效果很好,但是…… 如果文件名的部分之间有 > 1 个空格,我只会在文件名部分和冒号之间得到 1 个空格,然后是文件大小。
如何获取完整的文件名、: 以及文件大小?
【问题讨论】:
-
你不应该解析ls.mywiki.wooledge.org/ParsingLs的输出
-
解析
ls输出可能不是一个好主意;你为什么不stat文件呢?