Можно ли игнорировать определенный файл или каталог в ls или подстановке файлов?

Вам нужно будет сделать это в два этапа:

  1. Найти все уникальные имена файлов Fasta.
  2. Для каждого имени найдите все файлы с этим именем и соедините их.

С кодом:

Найти все файлы Fasta (предполагается нормальное имя файла без встроенных новых строк):

find. -type f -path '*/seq/in/*.fasta' -exec basename {} ';' | sort -u -o file.list

Затем для каждого имени соедините все файлы с таким же именем. Полученные файлы будут помещены в каталог newв текущем каталоге. Имя нового файла будет таким же, как и у объединенных файлов.

mkdir new
while read -r name; do
    find. -type f -path "*/seq/in/$name" -exec cat {} + >"new/$name"
done <file.list

То, что вы могли бы добавить к каждому из findвызовов, это-mindepth 6 -maxdepth 6(или соответствующая глубина, 6 может отличаться на единицу ), так что все файлы взяты с той же глубины в файловой иерархии. Вставьте эти параметры непосредственно перед -type f.


Альтернатива, предложенная steeldriver в комментариях, которая обходит создание отдельного списка имен файлов Fasta:

mkdir new
find. -type f -path '*/seq/in/*.fasta' \
    -exec sh -c 'for pathname do cat "$pathname" >>"new/${pathname##*/}"; done' find-sh {} +
1
10.04.2020, 04:52
1 ответ

В bash, если включена расширенная подстановка, вы можете использовать ! (abc )на инверсию -соответствует каталогу abc. Бывший. дано

$ tree
.
├── abc
│   ├── def
│   ├── ghi.txt
│   └── jkl
├── def
│   ├── abc
│   ├── abc.txt
│   └── f01
└── ghi.txt

2 directories, 7 files

и

$ shopt extglob
extglob         on

, затем

$ ls !(abc)
ghi.txt

def:
abc  abc.txt  f01
2
28.04.2021, 23:18

Теги

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