Je veux supprimer tous les fichiers d'un répertoire en ne laissant que certains fichiers spécifiés, ils n'ont rien en commun par leur nom. Comment pourrais-je y parvenir?
Par exemple, les noms de fichiers que je souhaite conserver sont:
file_1.png
, another_file.jpg
,some_music.mp3
command-line
files
rm
AGamePlayer
la source
la source
shopt -u extglob
).Créez un sous-répertoire
tmp
, déplacez tous les fichiers que vous souhaitez conserver dans ce répertoire et effectuez une opérationrm -f *
ultérieure. Cela n'affectera pas letmp
répertoire.Après cela, faites simplement:
(En supposant qu'aucun des fichiers que vous avez déplacés ne commence par un point).
C'est l'un des rares cas où il est logique d'utiliser la souris et un navigateur de fichiers comme Nautilus où vous pouvez réellement Ctrlcliquer sur les quelques fichiers que vous souhaitez conserver, puis utiliser le menu:
Edit -> Invert Selection
pour obtenir les autres fichiers, puis supprimez-les. .la source
ls
pour voir si vous n'avez raté aucun des fichiers que vous souhaitez conserver.Ajoutez les noms des fichiers que vous souhaitez conserver à un fichier texte, un par ligne. Ce fichier ne doit pas se trouver dans le répertoire ou vous devez également ajouter son nom.
Si le nom de votre répertoire est foo et le nom du fichier est bar , procédez comme suit.
Cela fait ce qui suit:
find -type f
recherche les noms de tous les fichiers dans foo et ses sous-répertoires et les imprime dans STDOUT. Avec option,-print0
il délimite les noms de fichiers avec des octets NUL.grep -v -f bar
exclut tous les noms de fichiers qui correspondent à une ligne dans la barre . Avec l'option,-z
il traite son entrée comme un ensemble de lignes délimitées par l'octet NUL, avec l'option,-Z
il délimite sa sortie avec un octet NUL.xargs rm
appelle àrm
plusieurs reprises pour supprimer les fichiers. Avec l'option,-0
il traite son entrée comme un ensemble de lignes délimitées par l'octet NUL.Cela fonctionne avec les noms de fichiers contenant des espaces blancs.
la source
find
je préfère le fairefind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +