所以基本上,我试图用下面的代码打印出一个人类可读的文件和目录大小列表(没有列出当前目录)
du -arh | sort -nr | tail -n +2 | awk -F"./" '{print $1 $2 $3}' | head -n $NUM
NUM 变量只是为列出的项目数量提供的参数。
上面没有 awk 定界符命令的输出是
4.0K ./url-list
4.0K ./testurl.sh
4.0K ./diskhogger.sh
4.0K ./backup/url-list
4.0K ./backup.sh
但是,添加 awk 命令输出
4.0K url-list
4.0K testurl.sh
4.0K diskhogger.sh
4.0K backuurl-list
4.0K backup.sh
只要有值得注意的子目录,就会出现类似的输出。
./Library/Cache - LibrarCache, etc.
明确地说,我试图在不影响其他正斜杠的情况下删除文件名开头的“./”。我的首选输出是:
4.0K url-list
4.0K testurl.sh
4.0K diskhogger.sh
4.0K backup/url-list
4.0K backup.sh
“备份/url-列表”不受影响。
是'.'在我的定界符中有一个我不知道的特殊字符?如果不是,这里到底发生了什么?
我是 shell 的新手,所以任何关于这方面的信息都会很棒。
谢谢!
为清晰起见进行了编辑。
最佳答案
如果您使用 awk
,您可以去掉一些其他命令
du -arh | sort -nr | awk -v len="$NUM" 'NR>1{gsub("\\.\\/",""); print} NR==len{exit}'
或者简单地使用
... | sed 's_\./__' | head ...
关于linux - 字符串定界符正在影响其单个字符的某些实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417324/