【问题标题】:Show only file names using rsync --recursive on Python?在 Python 上使用 rsync --recursive 仅显示文件名?
【发布时间】:2013-06-14 06:53:33
【问题描述】:

我正在对该目录中的所有文件使用 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 在 Python 中调用 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

【问题讨论】:

    标签: python rsync


    【解决方案1】:

    使用 os.walk ,它会列出所有文件。

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

    它将列出所有文件名。

    【讨论】:

    • 我正在尝试使用 rsync 访问远程服务器的文件。
    【解决方案2】:

    如果你想跳过目录下的所有内容,你可以这样做

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

    如果你想跳过所有的空目录,你可以使用

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

    但我不清楚你到底想达到什么目标。您想跳过目录,而不是其中的文件,如果您没有同步目录,您想在哪里同步它们?或者这只是屏幕上的输出?

    如果你只是想改变屏幕上的输出,你可以通过 grep 来管道它,即

    rsync -avz source_directory destination_directory | grep "\."
    

    那么您将只看到带有. 的行。请注意,您必须转义 .,否则它代表通配符。当然,这假设您的目录名称中没有任何点。

    【讨论】:

    • 请说明您想要实现的目标。
    • 其实这只是屏幕上的输出。我已经用预期的输出更新了我的问题。
    • 是的,它可以工作,但您已经指定了一个小问题。某些目录名称中可以有点。有办法解决吗?
    【解决方案3】:

    选项 --filter 可以帮助你吗?

    rsync --filter=- */

    【讨论】:

      猜你喜欢
      • 2018-01-13
      • 2011-10-02
      • 1970-01-01
      • 2010-10-16
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      相关资源
      最近更新 更多