I am at the path:
/myuser/downloads/And I create a sub folder:
/myuser/downloads/newNow I want to move all files and folders/sub-folders in the downloads folder to the sub-folder.
how can I do this?
I tried:
mv -R *.* new/But move doesn't take the -R switch it seems.
16 Answers
The command
mv !(new) newshould do the trick. If it doesn't work, run shopt -s extglob first.
To also move hidden files/directories (that beginning with a dot), run also shopt -s dotglob first.
So, to sum up:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob(it is always better to unset dotglob to avoid bad surprises).
I found something like this but is a bit simpler to understand, and it might work well for you too:
ls | grep -v new | xargs mv -t newAdding an explanation to the above solution:
From man pages:
mv -t-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORYgrep -v-v, --invert-match Invert the sense of matching, to select non-matching lines.
Explained by step:
lswill list the files in current directorygrep -v newwill return piped to that is not match newxargs mv -t newwill move the files piped to it fromgrep -vto the target directory
Just use mv * subdir1 and ignore the warning.
You can just use mv * subdir1. You will see a warning message relating to trying to move subdir1 into itself, like this:
mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'But it will move all of the other files and directories to subdir1 correctly.
An example:
$ ls
$ mkdir dir1 dir2 dir3
$ touch file1.txt file2.txt file3.txt
$ mkdir subdir1
$ ls
#=> dir1 dir2 dir3 file1.txt file2.txt file3.txt subdir1
$ mv * subdir1
#=> mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'
$ ls
#=> subdir1
$ ls subdir1
#=> dir1 dir2 dir3 file1.txt file2.txt file3.txt 3 Simple idea. Assuming you are in /myuser, rename downloads to new, create a new downloads directory then move new into it.
mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it. 1 If you want to move all the files from a folder to one of its subfolders you can use the following command:
find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/newIt will find all the files and then move them to your subfolder.
@waltinator: added -type d -name 'new' -prune to prevent traversal of /myuser/downloads/new.
You can try this alternative process –– remain in the path
/myuser/downloads/but, instead of first creating the /myuser/downloads/new/ directory, instead create a folder in the /myuser/ directory, with the command mkdir ../new, then move all the files in downloads to new, and finally move new into downloads. You can do this in one line, while in the /myuser/downloads/ path, with the command:
mkdir ../new && mv * ../new && mv ../new ../downloadsIn this case, you don't have to worry about any sort of "filtering" of files/folders, since new is on the same level of the path as downloads, so you can just move everything in downloads to new, and then move new into downloads`.
However, if you already have the subfolder new created and don't want to create another one, not to worry –– just change the mkdir command on the left-hand side of the first && in the command shown above to an mv command, pushing new up in the path; in other words, while you're still in /myuser/downloads/, you can change mkdir ../new to mv new ... Then the subfolder new [in the path /myuser/downloads/new/] gets pushed up to /myuser/new/, at the same level as /myuser/downloads/, and then you can run the rest of the command as it is shown above. All together, we have, starting from the path /myuser/downloads/:
mv new .. && mv * ../new && mv ../new ../downloadsand, since you wanted to "move all files and folders/sub-folders in the downloads folder to the sub-folder [new]", you're done! If you had wanted to move only files (or only folders or [insert more granular object movement]), then you'd have to use other commands that can "filter" objects, such as grep. The commands written above are sufficient for your purposes, though.