如何仅列出Unix中第一级子目录中的文件

时间:2015-04-08 08:21:40

标签: unix

如何仅列出Unix中第一级子目录中的文件。假设我有这样的文件夹。

Folder1 > SubFolder1
        > SubFolder2
        > SubFolder3

我想在所有子文件夹中仅列出.csv文件

提前致谢。

干杯

4 个答案:

答案 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