【问题标题】:Improving a bash script with python使用 python 改进 bash 脚本
【发布时间】:2013-01-13 11:57:58
【问题描述】:

如何减少以下冗余?也就是说,有没有办法将两个几乎相同的语句合二为一?

FULFILLMENT="/Users/david/Desktop/pds" # "/Volumes/FulfilmentArray/"
ARCH1="/Users/david/Desktop/etc" # "/Volumes/Arch_01/"

FILE="/tmp/files.txt"

# find all the paths and print them to a file
sudo find $FULFILLMENT -ls | python -c '
import sys
for line in sys.stdin:
    r = line.strip("\n").split(None, 10)
    fn = r.pop()
    print ",".join(r) + ",\"" + fn.replace("\"", "\"\"") + "\""
' > $FILE &&

sudo find $ARCH1 -ls | python -c '
import sys
for line in sys.stdin:
    r = line.strip("\n").split(None, 10)
    fn = r.pop()
    print ",".join(r) + ",\"" + fn.replace("\"", "\"\"") + "\""
' >> $FILE

【问题讨论】:

    标签: python linux bash shell unix


    【解决方案1】:

    Find 可以在单个命令中遍历多个目录:

    FULFILLMENT="/Users/david/Desktop/pds" # "/Volumes/FulfilmentArray/"
    ARCH1="/Users/david/Desktop/etc" # "/Volumes/Arch_01/"
    
    FILE="/tmp/files.txt"
    
    # find all the paths and print them to a file
    sudo find "$FULFILLMENT" "$ARCH1" -ls | python -c '
    import sys
    for line in sys.stdin:
        r = line.strip("\n").split(None, 10)
        fn = r.pop()
        print ",".join(r) + ",\"" + fn.replace("\"", "\"\"") + "\""
    ' > $FILE 
    

    【讨论】:

    • 谢谢,这也会在主目录中的所有子目录上进行递归查找?
    • 是的,它将遍历 $FULFILLMENT 和 $ARCH1 下的每个目录
    【解决方案2】:

    你可以这样做:

    cmd='
    import sys
    for line in sys.stdin:
        r = line.strip("\n").split(None, 10)
        fn = r.pop()
        print ",".join(r) + ",\"" + fn.replace("\"", "\"\"") + "\""
    '
    sudo find $FULFILLMENT -ls | python -c "$cmd" >> $FILE
    sudo find $ARCH1 -ls | python -c "$cmd" >> $FILE
    

    【讨论】:

      【解决方案3】:

      虽然以下输出略有不同,但我怀疑您会更满意:

      FULFILLMENT=/Users/david/Desktop/pds
      ARCH1=/Users/david/Desktop/etc
      exec > /tmp/files.txt
      
      find $FULFILLMENT $ARCH1 -exec stat -c '%i,%b,%A,%h,%U,%G,%y,%n' {} \;
      

      日期的格式不同,如果您不使用 POSIXLY_CORRECT 调用 findstat 可能会报告不同的块大小。这不会尝试转义文件名中的引号,也不会尝试将文件名放在引号中,因为您显然不担心可能包含逗号的文件名,因此我们可以假设输出可以可靠地解析为 csv 而不必担心引号。

      【讨论】:

        猜你喜欢
        • 2021-07-25
        • 2018-03-14
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 2013-09-26
        • 2013-07-21
        相关资源
        最近更新 更多