我试图在文本文件中获得特定文件夹的所有文件名,我只想要名称,而不是相对路径。我试着:
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
),因此我们添加一个换行符以匹配所需的输出。