2

次の冗長性を減らすにはどうすればよいですか?つまり、2つのほぼ同一のステートメントを1つに結合する方法はありますか?

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
4

3 に答える 3

4

検索は、1つのコマンドで複数のディレクトリを通過できます。

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 
于 2013-01-29T19:48:21.897 に答える
1

できるよ:

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
于 2013-01-29T20:15:46.930 に答える
1

以下の出力はわずかに異なりますが、私はあなたがより幸せになると思います:

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を使用してstat呼び出していない場合は、異なるブロックサイズが報告される場合があります。findカンマを含む可能性のあるファイル名については明らかに心配していないため、これはファイル名の引用符をエスケープしたり、ファイル名を引用符で囲んだりすることはありません。したがって、出力はcsvとして確実に解析でき、引用符について心配する必要はありません。

于 2013-01-29T21:15:42.487 に答える