我正在尝试获取文本文件中特定文件夹的所有文件名,我只需要名称,而不是相对路径。我试过了:
ls -1 a/b/c>filenames.txt它的输出是
file-2021-08-18.txt
file2-2021-08-18.js
file3-2021-08-18.json
file4-2021-08-19.json这是我想要的,但只是特定的一天的文件。
但是当我这样做的时候:
ls -1 a/b/c/*2021-08-18*>filenames.txt则输出为
a/b/c/file-2021-08-18.txt
a/b/c/file2-2021-08-18.js
a/b/c/file3-2021-08-18.json我只需要文件名,而不需要文件的路径。因此,需要输出:
file-2021-08-18.txt
file2-2021-08-18.js
file3-2021-08-18.json有什么简单的解决方案吗?或者我需要修剪输出。
谢谢!!
发布于 2021-08-18 20:25:39
当ls的参数是目录时,它会列出目录中的文件名。
但是当您使用通配符时,shell会将通配符扩展到所有文件名。所以ls不会接收目录作为它的参数,它会接收所有的文件名,并按给定的方式列出它们。
您可以切换到该目录,然后列出当前目录下匹配的文件:
(cd /a/b/c; ls *2021-08-18*) > filenames.txt括号使其在子shell中运行,因此原始shell的工作目录不受影响。
发布于 2021-08-18 22:18:18
对于GNU find,您可以使用-printf选项:
find a/b/c/ -type f -name "*2021-08-18*" -printf "%f\n" > filenames.txt指令%f挑选出文件名,并删除了所有前导目录。由于-printf不会在文件名后添加换行符(\n),因此我们添加一个换行符以匹配所需的输出。
https://stackoverflow.com/questions/68838279
复制相似问题