linux bash – supprime tous les fichiers qui se trouvent dans un répertoire d’un autre répertoire

Je veux supprimer tous les fichiers qui existent dans les new-files du dossier d’un autre dossier sous Linux en utilisant les commandes bash.

J’en ai besoin pour deux choses:

  • J’ai obtenu des scripts de configuration qui copient des fichiers de configuration pré-configurés. Je voudrais avoir la possibilité de supprimer ces fichiers à nouveau
  • Parfois, il arrive que les archives soient décompressées dans la racine de votre répertoire de téléchargements et non dans un sous-répertoire car la personne qui range le fichier met tout à la racine des archives.

Quelle est la meilleure façon de le faire?

Modifier, pour clarifier:

  1. J’ai un dossier avec des fichiers appelés new-files .
  2. Maintenant, j’exécute cp -r new-files/* other-directory/ .
  3. Disons que other-directory n’est pas le répertoire dans lequel je voulais les copier, mais il contient déjà d’autres fichiers, donc je ne peux pas simplement faire rm other-directory / *.
  4. Je dois supprimer tous les dossiers que j’ai accidentellement copiés. Comment je fais ça?

Vous pouvez utiliser la commande suivante:

 cd new-files ; find . -exec rm -rf path/to/other-directory/{} \; 

Il listera tous les fichiers copiés depuis le répertoire new-files (le répertoire new-files ne sera pas pris en compte). Pour chaque fichier, il supprimera la version copiée dans un other-directory .

Mais vous devez faire attention, si un fichier dans de new-files efface un fichier dans un other-directory , vous ne pourrez pas restaurer l’ancien fichier en utilisant cette méthode. Vous devriez envisager d’utiliser un système de gestion des versions (comme Git par exemple).

De ton:

Modifier, pour clarifier:

  1. J’ai un dossier avec des fichiers appelés new-files .
  2. Maintenant, j’exécute cp -r new-files/* other-directory/ .
  3. Disons que other-directory n’est pas le répertoire dans lequel je voulais les copier, mais il contient déjà d’autres fichiers, donc je ne peux pas simplement faire rm other-directory / *.
  4. Je dois supprimer tous les dossiers que j’ai accidentellement copiés. Comment je fais ça?

Vous pouvez parcourir le new-files/ original new-files/ et supprimer des fichiers portant le même nom dans l’ other-directory/ :

 for file in /new-files/* do rm /other-directory/"$file" done 

wee script pour faire ce que vous voulez:

 pushd `pwd` cd /path/to/new-files x=`find . -type f` popd echo $x | xargs rm