2017-08-31 3 views
0

J'ai une liste d'environ 200 noms de fichiers d'images. Sur le serveur Web, il existe plusieurs instances de fichiers avec ces noms de fichiers dans une structure de sous-dossier dans un répertoire.Trouver et supprimer la liste des noms de fichiers dans les sous-dossiers de mon serveur Web

Y at-il une commande que je peux exécuter pour trouver toutes les instances de ces noms de fichiers et les supprimer?

exemple des noms de fichiers

  • image 488363450-1.jpg
  • somename-186758341-1.jpg
  • randomname-588968004-1.jpg
  • blabla124405236-1-1. jpg
  • someimage_MEDIUM.jpg

Répondre

0

En supposant que le fichier fichier « Badfiles » contient une liste de noms de fichiers que vous souhaitez supprimer, et « myDirs » contient une liste des sous-répertoires dans lesquels ils pourraient , les éléments suivants devraient fonctionner:

for file in `cat badFiles` 
do 
    for dir in `cat myDirs` 
    do 
    [ -f ${dir}/${file} ] && rm ${dir}/${file} 
    done 
done 

Si la liste des répertoires comprend tous les sous-répertoires de votre répertoire de travail courant, alors ce qui suit devrait fonctionner sans créer le fichier myDirs:

for file in `cat badFiles` 
do 
    for dir in * 
    do 
    [ -d ${dir} ] && [ -f ${dir}/${file} ] && rm ${dir}/${file} 
    done 
done 

Pour appeler cela via SSH, vous pouvez mettre le contenu du script ci-dessous dans un fichier (dans cet exemple, je vais utiliser l'emplacement $ {HOME} /bin/killImages.sh):

Modifier ~ /bin/killImages.sh et utilisez le contenu ci-dessous. Une fois terminé, écrivez et sauvegardez.

#!/bin/bash 
cd $1 
for file in `cat ~/badFiles` 
do 
    for dir in * 
    do 
    [ -d ${dir} ] && [ -f ${dir}/${file} ] && rm ${dir}/${file} 
    done 
done 

Faites ensuite votre script exécutable:

chmod 700 ~/bin/killImages.sh 

ensuite sur votre système local, Execute:

ssh <user>@<hostname> "bin/killImages.sh /path/to/base/html" 

Si vous devez télécharger manuellement la liste des mauvais fichiers d'abord, vous feriez simplement scp ceci en place avant de lancer le script:

scp badFiles <user>@<hostname>:. 
ssh <user>@<hostname> "bin/killImages.sh /path/to/base/html" 

Espérons que cela aide.

+0

On dirait que ça va essayer! – blablaman4000

+0

quel type de fichier est badFiles. Est-ce un fichier .txt un par ligne d'autre chose? @ paul-h – blablaman4000

+0

Si tous les fichiers correspondent au modèle "image *" ou "image * jpg", alors j'irais avec la suggestion de Lucian de tirer parti de find. Oui, ceci traversera tous les sous-répertoires. Si ce n'est pas ce que vous voulez (vous voulez seulement un niveau plus profond que le répertoire de départ) cela peut être contrôlé avec le drapeau -depth. –

0
find /path/to/files -type f -name "image*" -exec rm -f {} \; 
  • nom "FILE-TO-FIND": modèle de fichier.
  • exec rm -rf {} \; : Supprime tous les fichiers correspondant au modèle de fichier.
  • type f: correspond uniquement aux fichiers et n'inclut pas les noms de répertoire.

(c'est en fait de here)

+0

Est-ce que ça va dans les sous-dossiers? – blablaman4000

+0

Oui, il regarde dans les sous-dossiers aussi – Lucian

+0

ne fonctionnera pas pour moi car je n'ai pas de motif à faire correspondre. c'est juste une liste de fichiers – blablaman4000