我需要从 python 运行一个命令,所以我正在做:
os.system('IFS=".";for f in data/* ; do read -ra ADDR <<< "$f"; mv "$f" "data/${ADDR[-1]}"; done;')
Run Code Online (Sandbox Code Playgroud)
但它说:
sh: 1: Syntax error: redirection unexpected
Run Code Online (Sandbox Code Playgroud)
但是如果我在 bash 中运行它,它工作正常:
IFS="."
for f in data/*
do
read -ra ADDR <<< "$f"
mv "$f" "data/${ADDR[-1]}"
done;
Run Code Online (Sandbox Code Playgroud)
它工作得很好。如何修复它以在一行中工作?
@steeldriver 已经查明了问题所在。你可以用以下方法解决:
import subprocess
subprocess.run(['bash', '-c', '''
IFS="."
for f in data/*; do
read -ra ADDR <<< "$f"
[[ ${#ADDR[@]} -gt 0 ]] && mv "$f" "data/${ADDR[-1]}"
done
'''])
Run Code Online (Sandbox Code Playgroud)
但在这一点上,你最好在 python 中完成整个事情而不是调用 bash:类似
for f in os.scandir("data"):
if f.is_file():
addr = f.name.split(".")[-1]
if f.name != addr:
os.rename(f.path, "data/"+addr)
Run Code Online (Sandbox Code Playgroud)