如何grep文件夹A和(文件夹A内的文件夹B)中的所有文件名?

如何grep文件夹A和(文件夹A内的文件夹B)中的所有文件名?

我想列出一个文件中的所有文件名文件夹A和另一个文件夹B里面文件夹A并将其保存到文本文件中。我使用的代码是:

ls -1 /home/CSV_XXX/* | grep ^'/home/CSV_XXX' >/home/Lists.txt

假设我有一个名为CSV_XXX在目录'/home/CSV_XXX' & 里面包含:

20161010
BDL_EXISTING_CARDS2_20161228.CSV
BDL_EXISTING_COLLATERAL_20161228.CSV
BDL_EXISTING_CUST_ADDRESS_20161228.CSV
.
.
.

'20161010'里面是一个文件夹CSV_XXX与目录 '/home/CSV_XXX/20161010' & 包含:

BDL_EXISTING_CARDS2_20161010.CSV
BDL_EXISTING_COLLATERAL_20161010.CSV
BDL_EXISTING_CUST_ADDRESS_20161010.CSV
.
.
.

然而,我却没能得到我想要的。

在我的第一次尝试中,我得到了:

/home/CSV_XXX/BDL_EXISTING_CARDS2_20161010.CSV
/home/CSV_XXX/BDL_EXISTING_COLLATERAL_20161010.CSV
/home/CSV_XXX/BDL_EXISTING_CUST_ADDRESS_20161010.CSV
.
.
.
/home/CSV_XXX/20161010:

没有文件夹 20161010 中内容的列表

另外,我怎样才能删除目录'/home/CSV_XXX/'如果我改变主意将其从我的列表中删除怎么办?

只是列表(包括20161010):

BDL_EXISTING_CARDS2_20161228.CSV
BDL_EXISTING_COLLATERAL_20161228.CSV
BDL_EXISTING_CUST_ADDRESS_20161228.CSV
.
.
.

答案1

find使用命令可能会更好

例如

find /home/CSV_XXX -type f -print

将递归列出 CSV_XXX 目录下所有目录中的所有文件。

如果您只想匹配某个模式的文件,那么您可以执行类似的操作

find /home/CSV_XXX -type f -name '*.csv' -print

这只会打印以结尾的文件名.csv

如果您想在列表中包含目录,则只需跳过该-type f部分。

删除目录前缀;

( cd /home/CSV_XXX ; find * -type f -name '*.csv' -print )

答案2

默认情况下,ls不递归。您需要添加-R标志才能使其下降到子目录中。您可能会发现这find是一个更好的命令,尽管 asls没有给出完整路径名,而find默认情况下却给出了完整路径名。

要从列表输出中删除文件,请使用grep -v.

ls和的手册页可以为findgrep提供更多详细信息。

相关内容