J'ai copié un directory en utilisant ceci:
cp -r dir/ ../../
sans réfléchir et réalisé qu'il a copié le contenu de dir
au lieu de réellement dir
dans le directory ci-dessus. Maintenant, j'ai un désordre de files que j'ai besoin de supprimer afin que je puisse refaire le cp
correctement. Comment puis-je supprimer tous les files que j'ai copiés par erreur s'ils ne correspondent à rien en particulier?
Ok, c'est fondamentalement la même chose que la réponse de Klapaucius . (Et il ne réparera pas les dommages causés si cp
a écrasé certains files existants.)
En supposant que vous êtes dans le directory source (dans dir
). Cette command:
find . -type f echo '{}' ';'
-print
tous les files (récursivement) présents dans votre directory dir
(tout comme -print
). L'option -type f
est là pour empêcher la list des sous-directorys.
Donc, si vous utilisez:
find dir -type f -exec echo '../../../{}' ';'
Cela devrait listr les files correspondants (copys) dans le directory cible.
Maintenant, si la list est correcte, vous pourrez supprimer les copys en utilisant:
find dir -type f -exec rm -- '../../../{}' ';'
Quant à l'élagage des directorys vides restants qui viennent de la cp
… hum …
Utilisez find
en combinaison avec -exec
. Mieux tester avec ls
avant comme ça:
find . -name "*" -exec ls ../../{} \;
Le code suivant gère les noms de files qui contiennent des newlines incorporés J'ai mis un script de version complète sur paste.ubuntu . Il vérifie l'existence et les tailles correspondantes … Le code pour générer datatables de test y est également inclus.
# This lists the original fully-qualified filename, # and its would-be counterpart (assuming it exists) unset ai while IFS= read -r -d $'\0' relf; do printf "%s\n$s" "$PWD${relf:1}" "$(dirname "$(dirname "$PWD")")${relf:1}" done < <(find . -type f \! -name '.' -name '*' -print0)
Voici un exemple de sortie de la version complète (mentionné ci-dessus), où un file est manquant, et un autre a une taille de file différente de l'original
WARNING ----- NOT in target ./file1 ok -------- sizes match ./c/file4-in-subdir WARNING ------ size mis-match ./file3 is sortingple-spaced ok -------- sizes match ./file2 has newline!