Стандартные команды Linux для этого:
find
команда для поиска имен файлов, например:
найдите файлы с именем xyz в/tmp
$ find /tmp -type f -name xyz
искать каталоги, имя которых содержит 'xyz' в/tmp
$ find /tmp -type d -name '*xyz*'
команды find и grep для поиска в содержимом файла, например:
найти в /tmp
файлы, содержащие xyz
$ find /tmp -type f -exec grep -l xyz {} \;
Будет ли это работать?
[user2@server-01 ~]$ tree myDir/
myDir/
├── A
│ └── a.jpg
├── B
│ └── a.jpg
└── b.jpg
2 directories, 3 files
Если вы хотите получить список всех файлов в myDir, файлы во всех подкаталогах имеют одинаковые имена; Самый быстрый способ — grep -v?
Либо с помощью команды find, pipe и grep -v для полного пути к файлам, которые вы хотите исключить.
[user2@server-01 ~]$ find myDir/ | grep -v "myDir/A/a.jpg"
myDir/
myDir/A
myDir/b.jpg
myDir/B
myDir/B/a.jpg
или с помощью вашего метода дерева. Но добавьте флаг -f для вывода полного списка каталогов.
[user2@server-01 ~]$ tree -f myDir/ | grep -v "myDir/A/a.jpg"
myDir
├── myDir/A
├── myDir/B
│ └── myDir/B/a.jpg
└── myDir/b.jpg
grep -E может принимать несколько параметров, разделенных вертикальной чертой. И может использоваться вместе с флагом -v.
[user2@server-01 ~]$ tree -f myDir/ | grep -vE "myDir/A/a.jpg | myDir/B/a.jpg"
myDir
├── myDir/A
├── myDir/B
└── myDir/b.jpg
2 directories, 3 files
У меня была такая же проблема. Действительно, я тоже заметил, что $ tree -I 'A/a.jpg'
не работает
Но где есть воля, там и способ:
$ tree
.
├── A
│ ├── a.jpg
│ └── b.jpg
└── a.jpg
$ tree --fromfile <<EOF
`tree -f -i -n -F --noreport | grep -v 'A/a.jpg' | grep -v -E '\.$' | sed "s/^\.//"`
EOF
.
├── A
│ └── b.jpg
└── a.jpg
Опция PS:--fromfile
доступна только для дерева 1.8 и выше