Как найти все имена файлов в папке A и (папка B внутри папки A)?

Я хотел перечислить все имена файлов в папке 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
.
.
.
0
17.02.2017, 05:58
2 ответа

Возможно, вам лучше использовать команду find

например

find / home / CSV_XXX -type f -print

рекурсивно перечислит все файлы во всех каталогах в каталоге CSV_XXX.

Если вам нужны только файлы, соответствующие шаблону, вы можете сделать что-то вроде

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

, и это будет печатать только имена файлов, заканчивающиеся на .csv

Если вы хотите включить каталоги в список, просто пропустите часть -типа f .

Чтобы удалить префикс каталога;

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

1
28.01.2020, 02:46

По умолчанию ls не рекурсивно. Вам нужно будет добавить флаг -R , чтобы он спускался в подкаталоги. Вы можете обнаружить, что find - лучшая команда для использования, хотя, поскольку ls не дает полного имени пути, тогда как find делает это по умолчанию.

Чтобы удалить файл из вывода списка, используйте grep -v .

Справочные страницы для ls , find и grep могут дать вам более подробную информацию.

0
28.01.2020, 02:46

Теги

Похожие вопросы