我想列出一个文件中的所有文件名文件夹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
和的手册页可以为find
您grep
提供更多详细信息。