如何仅列出Unix中第一级子目录中的文件。假设我有这样的文件夹。
Folder1 > SubFolder1
> SubFolder2
> SubFolder3
我想在所有子文件夹中仅列出.csv文件
提前致谢。
干杯
答案 0 :(得分:0)
像ls Folder1/*/*.csv
这样的东西可能就是你要找的东西。
仅使用文件名,仅使用find . -maxdepth 2 -iname '*.html' -printf '%f\n'
maxdepth参数定义进入文件夹的深度。 1表示当前目录,2表示更深层次等。默认值不受限制。由于您希望文件位于子目录中,因此2是正确的值。
答案 1 :(得分:0)
您可以使用find . -maxdepth 1 | grep csv
答案 2 :(得分:0)
使用sed删除路径。您可以在sed中使用#,这样您就不必逃避/.
ls Folder1/*/*.csv | sed 's#.*/##'
答案 3 :(得分:0)
通常的做法是使用find
。请注意引号:
find . -maxdepth 3 -mindepth 3 -name '*.csv'
-maxdepth 3
使find
仅匹配当前目录下至少3个级别找到的项目,-mindepth 3
使其忽略深度超过3的匹配项。例如:
$ tree
.
|-- file.csv
`-- Folder1
|-- file.csv
|-- SubFolder1
| |-- file.csv
| `-- foo
| `-- file.csv
|-- SubFolder2
| `-- file.csv
`-- SubFolder3
`-- file.csv
5 directories, 6 files
$ find . -maxdepth 3 -mindepth 3 -name '*.csv'
./Folder1/SubFolder1/file.csv
./Folder1/SubFolder3/file.csv
./Folder1/SubFolder2/file.csv
如果您只想要文件名而不是完整路径,则可以
find . -maxdepth 3 -mindepth 3 -name '*.csv' -exec basename {} \;
或使用find printf
:
find . -maxdepth 3 -mindepth 3 -name '*.csv' -printf "%f\n"
当然,您也可以使用shell globbing直接执行:
$ ls */*/*.csv
Folder1/SubFolder1/file.csv Folder1/SubFolder3/file.csv
Folder1/SubFolder2/file.csv
并单独获取文件名:
$ for i in */*/*.csv; do basename "$i"; done
file.csv
file.csv
file.csv
或者
$ for i in */*/*.csv; do printf "%s\n" ${i##*/}; done
file.csv
file.csv
file.csv