Используйте текстовый файл (содержащий имена файлов), чтобы скопировать файлы из текущего каталога в новый каталог - PullRequest
0 голосов
/ 23 января 2020

Я создал файл (search.txt), содержащий имена файлов .fasta, которые я хочу скопировать из текущего каталога (который также содержит много нежелательных .fasta файлов). Можно ли использовать этот текстовый файл для поиска и копирования соответствующих файлов в текущем каталоге в новое место?

Файл search.txt содержит список имен, подобных этому:

name_1
name_2
name_3

Я пытался построить поисковый термин, используя find и grep, например:

find . *.fasta | grep -f search.txt

, который возвращает вывод, подобный этому, для каждого соответствующего файла:

./name_1.fasta
./name_2.fasta
./name_3.fasta
name_1.fasta
name_2.fasta
name_3.fasta

Он находит правильный файлы, но я не уверен, что этот вывод полезен / может быть использован для копирования этих файлов?

Ответы [ 2 ]

1 голос
/ 23 января 2020

Используя Bash, вы можете прочитать все файлы из списка в массив:

$ mapfile -t files < search.txt
$ declare -p files
declare -a files=([0]="name_1" [1]="name_2" [2]="name_3")

Затем вы можете добавить желаемое расширение файла ко всем элементам массива:

$ files=("${files[@]/%/.fasta}")
$ declare -p files
declare -a files=([0]="name_1.fasta" [1]="name_2.fasta" [2]="name_3.fasta")

И, наконец, переместите их в нужное место:

$ mv "${files[@]}" path/to/new/location

Вам на самом деле не нужен промежуточный шаг:

mapfile -t files < search.txt
mv "${files[@]/%/.fasta}" path/to/new/location
1 голос
/ 23 января 2020

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

find . -type f -name '*.fasta' -print0 | grep -zf search.txt | xargs -r0 cp -t target-dir/

Он найдет все файлы с расширением .fasta, отобразит только те, которые соответствуют шаблонам в search.txt, и массово скопируйте их в target-dir, и каждое имя файла заканчивается нулевым байтом в случае, если имена файлов содержат символы новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...