0

そのディレクトリ内のすべてのファイル(サブディレクトリのすべてのファイルも含む)に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

これには1つの問題があります。次のようなディレクトリのリスト

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

私には役に立たない。ファイルでパスを取得したいだけです。この種のことは rsync のみで可能ですか? subprocess.callPythonで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/UCSC/hg19/Annotation/Archives/ok.txt
4

3 に答える 3

0

os.walk を使用すると、すべてのファイルが一覧表示されます。

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

すべてのファイル名がリストされます。

于 2013-06-14T08:04:02.333 に答える
0

ディレクトリの下にあるすべてをスキップしたい場合は、次のことができます

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

空のディレクトリをすべてスキップする場合は、次を使用できます

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

しかし、あなたが何を達成したいのか正確にはわかりません。ディレクトリをスキップしたいが、ディレクトリ内のファイルはスキップしたくない場合、ディレクトリを同期しなかった場合、どこでそれらを同期しますか? それとも、これは画面上の出力に関するものですか?

画面上の出力を変更したいだけの場合は、grep を介してパイプできます。つまり、

rsync -avz source_directory destination_directory | grep "\."

次に、 . の付いた行のみが表示されます..それ以外の場合はワイルドカードを表すため、エスケープする必要があることに注意してください。もちろん、これはディレクトリ名にドットが含まれていないことを前提としています。

于 2013-06-14T07:06:21.587 に答える