Показать только имена файлов с помощью rsync --recursive на Python?

134
19

Я использую rsync рекурсивный для всех файлов в этом каталоге (включая все файлы в подкаталогах тоже):

rathi/20090209.02s1.1_sequence.txt
rathi/20090209.02s1.2_sequence.txt
rathi/20090729.02s4.2_sequence.txt.gz
rathi/Homo_sapiens_UCSC_hg19.tar.gz
rathi/SRR002321.fastq.bz2
rathi/SRR002322.fastq.bz2
rathi/SRR002323.fastq.bz2
rathi/SRR002324.fastq
rathi/SRR002324.fastq.bz2
rathi/human_g1k_v37.fasta.gz
rathi/s_1_1_sequence.txt
rathi/s_1_sequence.txt
rathi/tesssssssssssssssssssssssssssssstttttttt.txt
rathi/test_data.tar.gz
rathi/Homo_sapiens
rathi/Homo_sapiens/UCSC
rathi/Homo_sapiens/UCSC/hg19
rathi/Homo_sapiens/UCSC/hg19/Annotation
rathi/Homo_sapiens/UCSC/hg19/Annotation/Archives
rathi/Homo_sapiens/UCSC/hg19/Annotation/Archives/ok.txt

У меня есть одна проблема с этим. Список каталогов, такой как

rathi/Homo_sapiens/UCSC
rathi/Homo_sapiens/UCSC/hg19
rathi/Homo_sapiens/UCSC/hg19/Annotation
rathi/Homo_sapiens/UCSC/hg19/Annotation/Archives

не нужны мне. Я хочу только получить путь к файлу. Возможно ли это, возможно, только с rsync? Я использую subprocess.call для вызова rsync в Python.

Итак, я хочу, чтобы мой результат был таким:

rathi/20090209.02s1.1_sequence.txt
rathi/20090209.02s1.2_sequence.txt
rathi/20090729.02s4.2_sequence.txt.gz
rathi/Homo_sapiens_UCSC_hg19.tar.gz
rathi/SRR002321.fastq.bz2
rathi/SRR002322.fastq.bz2
rathi/SRR002323.fastq.bz2
rathi/SRR002324.fastq
rathi/SRR002324.fastq.bz2
rathi/human_g1k_v37.fasta.gz
rathi/s_1_1_sequence.txt
rathi/s_1_sequence.txt
rathi/tesssssssssssssssssssssssssssssstttttttt.txt
rathi/test_data.tar.gz
rathi/Homo_sapiens/UCSC/hg19/Annotation/Archives/ok.txt

спросил(а) 2021-01-25T21:39:47+03:00 4 месяца, 4 недели назад
1
Решение
99

Если вы хотите пропустить все, что находится ниже каталога, вы можете сделать

rsync -avz --exclude '*/' source_directory destination_directory

Если вы хотите пропустить все пустые каталоги, вы можете использовать

rsync -avz --prune-empty-dirs source_directory destination_directory

Но мне непонятно, чего именно вы хотите достичь. Вы хотите пропустить каталоги, но не файлы в них, где вы хотите их синхронизировать, если вы не синхронизировали каталог? Или это просто вывод на экран?

Если вы просто хотите изменить вывод на экране, вы можете передать его через grep, т.е.

rsync -avz source_directory destination_directory | grep "\."

Тогда вы увидите только строки с . , Обратите внимание, что вам нужно убежать . , поскольку в противном случае это означает шаблон. Конечно, это предполагает, что у вас нет точек в именах ваших каталогов.

ответил(а) 2021-01-25T21:39:47+03:00 4 месяца, 4 недели назад
45

Используйте os.walk, он перечислит все файлы.

import os
for root, dirnames, filenames in os.walk('rathi')
print filenames

Он будет перечислять все имена файлов.

ответил(а) 2021-01-25T21:39:47+03:00 4 месяца, 4 недели назад
-5

Вариант май --filter поможет вам?

rsync --filter = - */

ответил(а) 2021-01-25T21:39:47+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема