![如何创建一个提供文件名及其源目录信息的新文件](https://linux22.com/image/885862/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%8F%90%E4%BE%9B%E6%96%87%E4%BB%B6%E5%90%8D%E5%8F%8A%E5%85%B6%E6%BA%90%E7%9B%AE%E5%BD%95%E4%BF%A1%E6%81%AF%E7%9A%84%E6%96%B0%E6%96%87%E4%BB%B6.png)
我有一个目录,其中包含很多子目录和文件。我想创建一个文件,提供每个文件名及其源目录路径信息
例如:
- 我有一个名为 sample 的文件夹,其中包含 sample1 和 sample2 子目录
- 我在样本 1 中有 ex1.csv、ex2.csv,在样本 2 目录中有 ex3.csv、ex4.csv
我需要创建一个文本文件(或)csv 文件,以以下方式提供信息
ex1.csv,样本/样本1
ex2.csv,样本/样本1
ex3.csv,样本/样本2
如果有人能帮助我在 unix 中创建脚本文件就太好了
提前致谢
答案1
给定如下结构
$ tree sample
sample
├── sample1
│ ├── ex1.csv
│ └── ex2.csv
└── sample2
├── ex3.csv
└── ex4.csv
2 directories, 4 files
您可以使用
$ find sample -type f -printf '%f,%h\n'
ex2.csv,sample/sample1
ex1.csv,sample/sample1
ex3.csv,sample/sample2
ex4.csv,sample/sample2
从 开始man find
,相关的-printf
格式说明符是
%f File's name with any leading directories removed (only
the last element).
%h Leading directories of file's name (all but the last ele‐
ment). If the file name contains no slashes (since it is
in the current directory) the %h specifier expands to
".".
如果希望将结果保存在文件中,只需使用运算符重定向命令输出即可>
。例如
find sample -type f -printf '%f,%h\n' > filelist