在bash中排序循环

时间:2013-04-19 22:57:24

标签: linux bash for-loop

我有一个像这样的bash脚本:

for d in /home/test/*
    do
    echo $d
done

输出这个:

/home/test/newer dir
/home/test/oldest dir

我想按创建时间订购文件夹,以便“最旧的dir”目录首先出现在列表中。我尝试过ls和树变种无济于事。

例如,

for d in `ls -d -c -1 $PWD/*`

返回:

/home/test/oldest
dir
/home/test/newer
dir

非常接近,但它不尊重目录名称中的空格。我的问题是,我如何拥有最老的dir并支持空白?

2 个答案:

答案 0 :(得分:1)

ls -d -c $PWD/* | while read line
  do echo "$line"
done

答案 1 :(得分:0)

另一种技术,一种施瓦茨变换:

stat -c $'%Z\t%n' /home/test/* | sort -n | cut -f2- |
while IFS= read -r filename; do
    # ...

此解决方案很脆弱,文件名包含换行符。