Terminal command to move all loose files into a directory with the file name
Command
This command was tested in a bash shell.
for x in *;do if [[ -f $x ]];then mkdir newdir;mv "$x" newdir/.;mv newdir "${x%.*}";fi;done
Explanation
The code shown below is not necessary commands you can execute. Rather, what is shown is an explanation of various parts of the code shown above.
Loop through all file names in current directory.
for x in *;do ... done
Only do regular files. (Skip the directories.)
if [[ -f $x ]];then ... fi;
Make new directory newdir
.
mkdir "newdir";
Move file x
to new directory newdir
.
mv "$x" newdir/.;
Rename newdir
to the name of the desired new directory. (Set newdir
to file name x
after removing the last .
and all characters that follow.)
mv newdir "${x%.*}";
Comments
If the desired directory already exists, then the newdir
folder (containing the file) will be moved to the desired directory. For example, if the file 123.mp4
and directory 123
both already exist, then file 123.mp4
will end up in 123/newdir
. You can test to see if this occurred by entering the command given below.
find . -name newdir
For example, if 123/newdir/123.mp4
existed, then the follow output would appear.
./123/newdir