Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python改进bash脚本_Python_Linux_Bash_Shell_Unix - Fatal编程技术网

用python改进bash脚本

用python改进bash脚本,python,linux,bash,shell,unix,Python,Linux,Bash,Shell,Unix,如何减少以下冗余?也就是说,有没有办法将两个几乎相同的语句组合成一个 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 $FULFILLMEN

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

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

“查找”可以在一个命令中遍历多个目录:

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 
你可以做:

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

虽然以下内容的输出略有不同,但我认为您会更满意:

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' {} \;

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

谢谢,这将对主目录中的所有子目录进行递归查找?是的,它将遍历$FULFILLMENT和$ARCH1下的每个目录