使用awk打印具有不同空格数的文件名中的所有空格

时间:2014-11-09 10:53:21

标签: bash parsing awk

我正在使用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

它工作正常,但...... 如果文件名有&gt;部件之间有1个空格,我只在文件名部分和冒号之间得到1个空格,然后是文件大小。

如何获取完整文件名,:,然后获取文件大小?

1 个答案:

答案 0 :(得分:1)

您似乎想要以下内容(前提是find使用printf%f%s修饰符处理%h选项:

src=Desktop
echo "Constructing $src files list.  $(date)"
find ~/"$src" -type f -printf '%f:%s:%h\n' > "$src"Files.txt

比你的方法短得多,效率更高!


这不会丢弃.DS_STOREIcon\r内容......但我不确定您 想要丢弃的内容。如果您想完全放弃.DS_STORE 目录

find ~/"$src" -name '.DS_STORE' -type d -prune -o -type f -printf '%f:%s:%h\n' > "$src"Files.txt

@guido似乎猜到了grep -v "Icon\r"的意思:忽略以Icon结尾的文件;如果这是他的猜测是正确的,那么这将做:

find ~/"$src" -name '.DS_STORE' -type d -prune -o ! -name '*Icon' -type f -printf '%f:%s:%h\n' > "$src"Files.txt