list --full-time 使用 ls 和文件列表
list --full-time with ls and a file list
我使用 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/\(.*\)/''/" ; ls --full-time $(!!)
sed
部分是必需的,因为 显然 文件名中有 space ...否则,如果文件没有 space,这$(!!)
工作正常。
我想一个可行的解决方案也是 ls -R --full-time | grep "what I want" > listfile.txt
,但我认为这需要很长时间才能 运行。小步走是必不可少的,这样我就可以检查列表长度,因为我的磁盘访问有时会被关闭。 运行 find
已经花了我一个小时。
注意:我在 windows10 上使用 git bash 到 运行 命令,所以我不能 运行 详细说明 .sh
脚本。与 运行 相比,我更喜欢单个终端条目。我知道,不是最好的配置。
您可以将文件的内容直接嵌入到命令中。
$: 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。
c.f。 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 分别报告访问、修改和状态更改,自纪元以来的秒数为大写,人工解析的小写 date/time 带有小数秒和时区信息。
@Paul Hodges 的回答在没有空格的情况下工作正常。
但这是我的情况,所以这里有一些信息。
第一步,我找到所有 zip 文件所在的位置,并将它们的位置保存在一个 txt 文件中:
find /disk/Path/ -name *.zip > ~/ziplist.txt
然后我在这个文件中使用 grep
grep 查找与我的项目相关的那些
grep keyword ziplist.txt > 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 $(cat /Disk/Path/mylist.txt) --format %w%z > ~timefile.txt
我使用 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/\(.*\)/''/" ; ls --full-time $(!!)
sed
部分是必需的,因为 显然 文件名中有 space ...否则,如果文件没有 space,这$(!!)
工作正常。
我想一个可行的解决方案也是 ls -R --full-time | grep "what I want" > listfile.txt
,但我认为这需要很长时间才能 运行。小步走是必不可少的,这样我就可以检查列表长度,因为我的磁盘访问有时会被关闭。 运行 find
已经花了我一个小时。
注意:我在 windows10 上使用 git bash 到 运行 命令,所以我不能 运行 详细说明 .sh
脚本。与 运行 相比,我更喜欢单个终端条目。我知道,不是最好的配置。
您可以将文件的内容直接嵌入到命令中。
$: 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。
c.f。 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 分别报告访问、修改和状态更改,自纪元以来的秒数为大写,人工解析的小写 date/time 带有小数秒和时区信息。
@Paul Hodges 的回答在没有空格的情况下工作正常。 但这是我的情况,所以这里有一些信息。
第一步,我找到所有 zip 文件所在的位置,并将它们的位置保存在一个 txt 文件中:
find /disk/Path/ -name *.zip > ~/ziplist.txt
然后我在这个文件中使用 grep
grep 查找与我的项目相关的那些
grep keyword ziplist.txt > 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 $(cat /Disk/Path/mylist.txt) --format %w%z > ~timefile.txt