3

I'm trying to do mv test-dir/* ./ but in python. I have written the following code but throws OSError: [Errno 66] Directory not empty:

import os    
os.rename(
    os.getcwd() + '/test-dir',
    os.path.abspath(os.path.expanduser('.')))
Vaibhav Mule
  • 5,016
  • 4
  • 35
  • 52

2 Answers2

4

You may want to use shutil.move() to iteratively move the files from a directory to another.
For example,

import os
import shutil

from_dir = os.path.join(os.getcwd(),"test-dir")
to_dir = os.path.abspath(os.path.expanduser('.'))

for file in os.listdir(from_dir):
    shutil.move(os.path.join(from_dir, file), to_dir)
abc
  • 11,579
  • 2
  • 26
  • 51
0

You're telling the OS to move test-dir, not its contents. It would normally replace the target (. in this case) but that target obviously isn't empty, so the implicit rmdir fails. Even if it weren't empty, it's likely impossible to remove or replace the . name.

The shell * is a glob, which would expand to each thing within test-dir, which you could move individually; however, you'd want to transfer their name to the target directory, i.e. test-dir/foobar to ./foobar. os.path.basename can help you extract that portion.

Yann Vernier
  • 15,414
  • 2
  • 28
  • 26