web-dev-qa-db-fra.com

Comment puis-je déplacer des fichiers par type de récursivement à partir d'un répertoire et de ses sous-répertoires vers un autre répertoire?

Quel serait un bon moyen de déplacer un type de fichier d'un répertoire et de tous ses sous-répertoires?

Comme "déplacer tout * .ogg in/thisdir récursivement à/somedir". J'ai essayé quelques choses; Mon meilleur effort était (toujours pas si génial):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Il est retourné sur chaque ligne avant chaque nom de fichier,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'
34
Steve Burdine

vous pouvez utiliser trouver trouvé avec xargs pour cela

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

La commande -i dans la commande ci-dessus indique à quelle chaîne de remplacement que vous souhaitez utiliser (sinon elle ajoute les arguments à la fin de la commande).

OR
[.____] Dans votre commande, essayez simplement de déplacer '{}' après mv commande.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;

27
Hemant
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Vous êtes un peu interchangé les arguments pour mv

13
Coding District

Dans ZSH ou Bash 4, pour rassembler tous les *.ogg Fichiers dans /somedir:

mv /thisdir/**/*.ogg /somedir

Si vous vouliez reproduire la hiérarchie de l'annuaire: (AVERTISSEMENT, TAPED directement dans le navigateur)

rsync -a --Prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir