【问题标题】:list --full-time with ls and a file listlist --full-time with ls 和一个文件列表
【发布时间】:2021-10-22 12:11:10
【问题描述】:

我使用find /path/ -name *.zip > ~/ziplist.txt 在远程磁盘中收集了一个 zip 列表。

~/ziplist.txt 看起来像这样:

./path/to/the/file.zip
./path/to/the/file2.zip
./path/to/the/file3.zip
./path/to/the/very/nice/file.zip

我使用grep 过滤了这个列表,现在我必须更正.txt 文件中的列表,我想将它提供给ls x --full-time 以收集它们的时间戳(x 是文件列表)。

有可能吗?

我尝试过这样的事情:for f in tmp.txt do echo $( ls $f --full-time) done

编辑:我尝试过的另一件事是:cat tmp.txt | sed- "s/\(.*\)/'\1'/" ; ls --full-time $(!!) sed 部分是必需的,因为显然文件名中有空格...否则,如果文件没有空格,则 $(!!) 可以正常工作。

我猜一个可行的解决方案也是ls -R --full-time | grep "what I want" > listfile.txt,但我认为这需要很长时间才能运行。有小步骤是必不可少的,因此我可以检查列表长度,因为有时我的磁盘访问可能会关闭。运行find 已经花了我一个小时。

注意:我在 windows10 上并使用 git bash 运行命令,所以我无法运行复杂的 .sh 脚本。我更喜欢单个终端条目来运行它。我知道,不是最好的配置。

【问题讨论】:

    标签: grep timestamp ls


    【解决方案1】:

    您可以将文件的内容直接嵌入到命令中。

    $: ls --full-time $(<~/ziplist.txt)
    

    在这种情况下,不要引用文件插入,因为这会将文件的全部内容视为单个文件名。

    要单独阅读它们,don't read lines with for loops

    while read -r file; do ls --full-time "$file"; done < ~/ziplist.txt
    

    速度较慢,但​​允许您引用文件名以避免嵌入空格等问题。

    在你花太多时间在这之前,请阅读为什么你应该not parse ls output

    参考stat

    mapfile -t lst < ~/ziplist.txt && stat -c "%x %n" "${lst[@]}"
    2021-06-18 13:44:18.351339200 -0500 dev
    2021-10-21 20:50:20.649098700 -0500 sts
    2021-10-21 09:11:37.398341900 -0500 file
    2021-10-25 08:13:03.788650200 -0500 a b c
    

    注意dev是这里的目录,a b c有嵌入空格。
    X、Y 和 Z 分别报告访问、修改和状态更改,大写字母以自纪元以​​来的秒数为单位,小写字母以人工解析的日期/时间表示,带有小数秒和时区信息。

    【讨论】:

    • 我刚刚编辑了这个问题,在cat ziplist.txt 之后使用$(!!) 获得了相同的结果。但现在的问题是文件名中的空格。 ^^'
    • stat 正是我需要的,谢谢!我认为我没有解析问题,因为所有文件都是用 windows 创建的,而且文件名更具限制性。只需要解决这个空间问题...
    • Windows 允许空格,并且您不会想到的其他内容可以进入,但更喜欢statfind。 ;)
    • 如果该解决方案适合您,请接受它?总是好的政策!
    • 这还不是解决方案^^' 我的文件中有空格。我会接受它,但完成它的一点帮助将是完美的。
    【解决方案2】:

    如果没有空格,@Paul Hodges 的答案可以正常工作。 但这是我的情况,所以这里有一些信息。

    第一步,我找到所有 zip 文件所在的位置,并将它们的位置保存在一个 txt 文件中: find /disk/Path/ -name *.zip &gt; ~/ziplist.txt

    然后我在此文件中使用 grep 查找与我的项目相关的内容,使用 grep grep keyword ziplist.txt &gt; mylist.txt 我使用wc -l mylist.txt ; cat mylist.txt 来查看这个列表。

    现在我想了解有关此文件列表的一些时间信息。由于其中有空格,因此文件路径已损坏。首先我需要修改内部字段分隔符(IFS),找到代码here

    OLD_IFS=$IFS
    IFS=$'\n'
    

    由于我在 Windows 上,行尾 (EOL) 与新的 IFS 不兼容。所以我需要用这个help替换它。

    dos2unix mylist.txt
    

    现在我可以在 mylist.txt 上使用 stat。

    stat $(cat /Disk/Path/mylist.txt) --format %w%z > ~timefile.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2015-12-22
      • 2013-09-09
      • 1970-01-01
      • 2015-07-01
      • 2023-01-10
      • 1970-01-01
      相关资源
      最近更新 更多