Domanda

Is it possible to get around this problem?

I have a situation where I need to move some files to 1 directory below.

/a/b/c/d/e/f/g

problem is that the filename inside g/ directory is the same as the directory name

and I receive the following error:

mv: cannot overwrite directory `../297534' with non-directory

Example: /home/user/data/doc/version/3766/297534 is a directory, inside there is a also a file named 297534

so I need to move this file to be inside /home/user/data/doc/version/3766

Command This is what I am running: (in a for loop)

cd /home/user/data/doc/version/3766/297534
mv * ../
È stato utile?

Soluzione

You can't force mv to overwrite a directory with a file with the same name. You'll need to remove that file before you use your mv command.

Altri suggerimenti

Add one more layer in your loop.

Replace mv * ../ with

for f in `ls`; do rm -rf ../$f; mv $f ..; done

This will ensure that any conflict will be deleted first, assuming that you don't care about the directory you're overwriting.

Note that this will blow up if you happen to have a file inside the current directory which matches the current directory's name. For example, if you're in /home/user/data/doc/version/3766/297534 and you're trying to move a directory called 297534 up. One workaround to this is to add a long suffix to every file, so there's little chance of a match

for f in `ls`; do mv $f ../${f}_abcdefg; done
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top