If your photos are in /path/to/photos/
and its subdirectories, and you want to move then in /path/to/master/
, and you want to select them by extension .jpg
, .JPG
, .png
, .PNG
, etc.:
find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -t '/path/to/master' -- {} +
If you don't want to filter by extension, and just move everything (i.e., all the files):
find /path/to/photos -type f -exec mv -nv -t '/path/to/master' -- {} +
The -n
option so as to not overwrite existing files (optional if you don't care) and -v
option so that mv
shows what it's doing (very optional).
The -t
option to mv
is to specify the target directory, so that we can stack all the files to be moved at the end of the command (see the +
delimiter of -exec
). If your mv
doesn't support -t
:
find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -- {} '/path/to/master' \;
but this will be less efficient, as one instance of mv
will be created for each file.
Btw, this moves the files, it doesn't copy them.
Remarks.
- The directory
/path/to/master
must already exist (it will not be created by this command). - Make sure the directory
/path/to/master
is not in/path/to/photos
. It would make the thing awkward!