如何在shell脚本中获得特定文件夹的文件名列表?



我试图在文本文件中获得特定文件夹的所有文件名,我只想要名称,而不是相对路径。我试着:

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

有什么直接的解决方案吗?或者我需要修剪输出

谢谢! !

ls的参数是一个目录时,它列出目录中的文件名。

但是当您使用通配符时,shell将通配符扩展到所有文件名。因此,ls不接收目录作为参数,它接收所有文件名,并将它们列出。

您可以切换到当前目录,然后列出当前目录中匹配的文件:

(cd /a/b/c; ls *2021-08-18*) > filenames.txt

括号使该命令在子shell中运行,因此原始shell的工作目录不受影响。

对于GNUfind,您可以使用-printf选项:

find a/b/c/ -type f -name "*2021-08-18*" -printf "%fn" > filenames.txt

指令%f挑选出文件名,去掉所有的前导目录。由于-printf没有在文件名后添加换行符(n),因此我们添加一个换行符以匹配所需的输出。

最新更新