Je veux supprimer tous les files dans un directory en ne laissant que quelques files spécifiés, ils n'ont rien en commun par leur nom. Comment pourrais-je y parvenir?
Par exemple, les noms de file que je veux conserver sont:
file_1.png
, some_music.mp3
, some_music.mp3
Si vous utilisez bash:
shopt -s extglob rm !(file1|file2|file3)
Après le manuel de bash:! !(pattern-list)
correspond à tout sauf à l'un des motifs donnés et à la list de motifs est une list d'un ou plusieurs motifs séparés par un |
.
Créez un sous-directory tmp
, déplacez tous les files que vous voulez conserver dans ce directory et faites ensuite un rm -f *
. Cela n'affectera pas le tmp
.
Après ça suffit de faire:
mv tmp/* . rmdir tmp
(En supposant qu'aucun des files que vous avez déplacés ne commence par un point).
Ceci est l'un des rares cas où il est logique d'utiliser la souris et un browser de files comme Nautilus où vous pouvez réellement pouvez Ctrl -click les quelques files que vous voulez conserver, puis utilisez le menu: Edit -> Invert Selection
pour get le d'autres files, puis supprimez-les.
Ajoutez les noms des files que vous souhaitez conserver à un file text, un par ligne. Ce file ne doit pas être dans le directory ou vous devez également append son nom.
Si le nom de votre directory est foo et que le nom du file est bar , procédez comme suit.
find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm
Ceci est le suivant:
find -type f
search les noms de tous les files de foo et de ses sous-directorys et les imprime en STDOUT. Avec l'option -print0
elle délimite les noms de files avec des octets NUL. grep -v -f bar
exclut tous les noms de files qui correspondent à une ligne dans la barre . Avec l'option -z
il traite son input comme un set de lignes délimitées par un octet NUL, avec l'option -Z
il délimite sa sortie avec un octet NUL. xargs rm
appelle rm
plusieurs resockets pour supprimer les files. Avec l'option -0
il traite son input comme un set de lignes délimitées par un octet NUL. Cela fonctionne avec des noms de files contenant des espaces blancs.