如何遍历目录中的所有文件(按创建日期排序),某些文件名的名称中带有空格

菲尔多

首先我有

for file in `ls -t dir` ; do
  #blah
done

但是带有空格的文件将分为两个迭代。

我发现了很多解决空间问题的方法,但是随后在$file变量中保留了一些日期信息

编辑:显示一种这样的变化:

for file in `find . -printf "%T@ %Tc %p\n" | sort -n` ; do
  #blah
done

问题在于,所有时间信息仍然在$file循环中变量(同样,这不起作用,因为我碰巧是在OSX上,它的find实用程序缺少该-printf选项...)

主教

使用find与组合xargs通过与NUL字节分离文件名,并使用while效率和空间保存读取循环:

find /path/to/dir -type f -print0 | xargs -0 ls -t | while read file
do
    ls "$file" # or whatever you want with $file, which may have spaces
               # so always enclose it in double quotes
done

find生成文件列表,ls在这种情况下按时间排列它们。要颠倒排序顺序,请替换-t-tr如果要按大小排序,请替换-t-s

例:

$ touch -d '2015-06-17' 'foo foo'
$ touch -d '2016-02-12' 'bar bar'
$ touch -d '2016-05-01' 'baz baz'
$ ls -1
bar bar
baz baz
foo foo
$ find . -type f -print0 | xargs -0 ls -t | while read file
> do
> ls -l "$file"
> done
-rw-rw-r-- 1 bishop bishop 0 May  1 00:00 ./baz baz
-rw-rw-r-- 1 bishop bishop 0 Feb 12 00:00 ./bar bar
-rw-rw-r-- 1 bishop bishop 0 Jun 17  2015 ./foo foo

为了完整起见,我将重点说明从注释到问题的一个问题:-t按修改时间排序,而不是严格按创建时间排序。这些文件所在的文件系统决定了创建时间是否可用。由于您最初的尝试是使用-t,所以我认为修改时间就是您所关心的时间,即使这并不是很真实。

如果您需要创建时间,则必须从某个来源中提取它,例如,stat或者在其中编码的文件名中。从根本上讲,这意味着用xargs -0 ls -t管道输送到的合适命令来代替sort,例如:xargs -0 stat -c '%W' | sort -n

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何访问名称中带有空格的文件/目录?

在shell中处理带有空格的文件名

BASH中带有空格的文件名

在文件名中带有空格的GetFiles

名称中带有空格的文件

加载文件名,文件名中带有空格

如何删除多个文件名中的所有空格?

如何替换GCP Cloud Storage中文件名中的所有空格?

Python scp复制文件,文件名中带有空格

使用ftplib下载文件名中带有空格的文件

处理文件名中带有空格的文件列表

批量修改多个文件名中带有空格的文件

当有空格时,某些东西会更改 Windows 中的文件名(Windows Shell 参数)

如何从目录中的所有文件名中删除“ _”

如何使用python遍历Google Cloud Storage子目录中的所有文件名?

如何遍历目录中的所有子文件夹,并删除具有特定文件名的文件

我在脚本中的 `find` 命令找不到名称中带有空格的文件和目录

如何在Linux中连续创建带有特殊字符(如()和空格)的文件名?

ffmpeg:bash脚本中带有空格的文件名

链接到Bitbucket Markdown中带有空格的文件名

文件名中带有空格的可绘制对象?

在回声内的perl命令中带有空格的文件名

在Windows上,Ruby打开文件名时,shell中带有空格

无法引用文件名中带有空格的块 blob

如果文件名中带有空格,如何正确将git ls-files输出传递给Java?

如何将WSL中带有空格的文件名传递给cmd.exe?

如何按文件名中的日期对文件排序?

批处理文件,文本文件中的变量/文件名中带有空格

为什么在bash中会忽略名称中带有空格的文件和目录?