Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Unix中仅列出第一级子目录中的文件_Unix - Fatal编程技术网

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

如何在Unix中仅列出第一级子目录中的文件,unix,Unix,如何在Unix中仅列出第一级子目录中的文件。假设我有这样的文件夹 Folder1 > SubFolder1 > SubFolder2 > SubFolder3 我只想在所有子文件夹中列出.csv文件 提前谢谢 干杯像ls Folder1/*/*.csv这样的东西可能就是你想要的 如果只有文件名而没有其他名称,请使用“查找”-maxdepth 2-iname'*.html'-printf'%f\n' maxdepth参数定义进入文件夹的深度。1表

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

Folder1 > SubFolder1
        > SubFolder2
        > SubFolder3
我只想在所有子文件夹中列出.csv文件

提前谢谢

干杯

像ls Folder1/*/*.csv这样的东西可能就是你想要的

如果只有文件名而没有其他名称,请使用“查找”-maxdepth 2-iname'*.html'-printf'%f\n'


maxdepth参数定义进入文件夹的深度。1表示当前目录,2表示更深一层等。默认值是无限的。因为您希望文件位于子目录中,所以2是正确的值。

您可以使用find-maxdepth 1 | grep csv

使用sed删除路径。您可以在sed中使用,这样就不必转义/

ls Folder1/*/*.csv | sed 's#.*/##'

通常的方法是使用find。请注意引用的顺序:

find . -maxdepth 3 -mindepth 3 -name '*.csv'
-maxdepth 3使其只查找在当前目录下至少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:

当然,您也可以使用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


为什么不在所有文件夹中获取.csv文件,然后排除在Folder1中的文件?无论如何,如果我最终获得了第一级子文件夹中的文件列表,那么这就达到了目的:,请问您是否有相应的命令?\n我没有提供答案-只是问您为什么不这样做。我假设在问这个问题之前,你已经在谷歌等网站上做了一些搜索。这几乎可以奏效,但在结果中,我只需要文件名而不需要文件夹。请告诉我我们是否只能获取文件名,而不能获取文件夹路径。@Kriti附加了另一个命令,它只打印文件名。酷。。。它起作用了。。但是,除了文件名列表外,它还打印了我们之前得到的错误。这起作用了…'s Folder1/*/*.csv | sed的。*/来自Walter A先生。。。感谢您的回复…我收到以下错误:查找:检测到文件系统循环;/。snapshot“是与“”相同的文件系统l oop的一部分。如果可以使用find,为什么要使用两个命令-maxdepth 2-iname'*.csv',它实际上可以工作,并且没有选择abcsv.txt或csv-processor.cs,maxdepth 1甚至没有进入子目录。@sami,我只是在运行find.-maxdepth 1-iname'*.csv',但是得到了这个错误。find:.-maxdepth::没有这样的文件或目录find:1:没有这样的文件或目录如果有任何错误,请告诉我。我必须在这里改变点什么吗…@Kriti你在这两者之间失去了空间。和-maxdepth抱歉,我的错误,但请注意maxdepth至少需要2个。@SamiKuhmonen,我尝试了这个发现-maxdepth 1-iname'*.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