Documents = ['*pdf', '*docx', '*txt']
for i in range(len(Documents)):
if glob.glob(Documents[i]):
print(Documents[i], True)
shutil.move(glob.glob(Documents[i])[0], '/home')
else:
print(Documents[i], False)
嗯,一切都很顺利,直到:
shutil.move(glob.glob(Documents[i])[0], '/home')
基本上是:
shutil.move(scr, dst)
并产生错误:
*pdf False
*docx True
Traceback (most recent call last):
File "/usr/lib/python3.2/shutil.py", line 326, in move
os.rename(src, real_dst)
OSError: [Errno 13] Permission denied
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "teste.py", line 19, in <module>
shutil.move(glob.glob(Documents[i])[0], '/home')
File "/usr/lib/python3.2/shutil.py", line 334, in move
copy2(src, real_dst)
File "/usr/lib/python3.2/shutil.py", line 146, in copy2
copyfile(src, dst)
File "/usr/lib/python3.2/shutil.py", line 99, in copyfile
with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/home/jesus.docx'
我尝试在scr和dst中使用绝对路径,但它不起作用。我浏览了网页,发现它可能与权限有关,但如果我必须更改权限,它将破坏脚本的目的,这就是为什么我会在进入权限之前尝试在这里找到帮助。
那么,我该怎么办?
我的目的是在Linux用户的目录中移动文件。 (根据文件格式对它们进行排序..)... ex-&gt; .jpg - &gt;图片,.pdf - &gt;文件等。 (这就是为什么我不能获得许可来加强生活...)
我也是编程的新手(只是这样你们不会非常讨厌:D) 而且,这也是我在这个社区的第一个问题,所以如果我听起来丢失或重复,请不要耐心?感谢
答案 0 :(得分:3)
您正在尝试将文件写入/home
目录。你不应该这样做。
Linux是一个多用户操作系统。 /home
是所有用户主目录所在的位置。每个用户都应在/home
下拥有自己的目录。例如你的/home/Joao
。
更改此行的最后一个参数
shutil.move(glob.glob(Documents[i])[0], '/home')
到
shutil.move(glob.glob(Documents[i])[0], '/home/your_username')
以下是一般性改进建议:
# Variable names are lower case
documents = ["*.pdf", "*.docx", "*.txt"]
# You iterate over a for loop like this. Python's for is like for-each. You get the actual item.
for doc in documents:
if glob.glob(doc):
shutil.move(glob.glob(doc)[0], '/home/your_username/Documents')
答案 1 :(得分:1)
您希望运行脚本的用户能够使用提升的权限运行它。有一个叫做setuid位(设置用户ID)的东西,设置后会运行带有所有者权限的脚本。还有一个setgid(设置组ID)位。
要设置它们,请成为root并执行:
chown root scriptname
chmod ug+s scriptname
设置setuid位和setgid位。