J'ai des noms de fichiers dans un fichier que je dois supprimer dans un autre répertoire.
Disons que j'ai x
et les y
fichiers dans dir a
. Comment puis-je le supprimer en utilisant chat?
J'ai essayé,
rm -f a/{`cat a.txt`}
a.txt
a le contenu x,y,z
.
Si elles sont dans le même dossier, je peux mettre x y z
en a.txt
et courir,
rm -f `cat a.txt`
qui fonctionne bien.
J'ai aussi essayé,
rm -f "a/{"`cat a.txt`"}"
Cette commande ira dans un fichier docker donc je préfère ne pas utiliser de variables aussi.
Je ne veux pas mettre a/x a/y a/z
dans le fichier qui peut être une option, car il est corrigé qui a
ne contiendra que les fichiers. Mais a
devrait être changé que dans le fichier docker. Merci pour toutes les suggestions à l'avance :)
la source
cd
que ne ressemble pas à la meilleure façon de faire. C'est toujours mieux que toutes les autres options. Merci :).Vous devriez utiliser la boucle while pour lire le fichier ligne par ligne, puis appliquer chaque ligne à
rm
. C'est une approche très courante et fréquemment utilisée dans les scriptsNaturellement, le format du fichier doit être la liste des fichiers avec un fichier par ligne.
la source
while
. Merci :)while
boucle?N'essayez pas de l'utiliser
$(cat file)
pour ce genre de chose - cela cassera par exemple s'il y a des espaces dans les noms de fichiers, par exemple, donnéet
ensuite
Au lieu de cela, vous pouvez utiliser
xargs
Si vous voulez vraiment utiliser
cat
, combinez-le avecxargs
:(bien que vu la
-a
fonctionnalité, c'est une utilisation inutile de Cat )Notez que cela
-I{}
signifie que-L 1
ierm
est appelé une fois pour chaque ligne du fichier d'entrée; si vous n'avez pas besoin de préfixer un chemin de répertoire, vous pouvez alors améliorer l'efficacité de la commande en supprimant les-I
cas dans lesquelsxargs
plusieurs arguments seront passésrm
. Cependant, dans ce cas, vous devez explicitement définir le délimiteur d'entrée sur newline, par exemplexargs -a a.txt -d '\n' rm
pour éviter les coupures sur les espaces.la source