0
votes

Passage de la boucle variable à bash trouvez -regex argument?

J'essaye de copier des images sélectionnées par une expression REGEX via find . La commande ci-dessous s'exécute mais ne copie pas les fichiers. Comment puis-je passer une variable de boucle (par exemple la lecture de lignes d'un fichier) à l'argument find -regex?

".*B - 12.*tif"
".*D - 09.*tif"
".*G - 03.*tif"
".*G - 12.*tif"
...

Le fichier hit_images_regex_list.txt dans lequel je tire REGEX expressions de ressemble à ceci:

cat hit_images_regex_list.txt | while read line; 
do 
find . -regex "${line}" -exec cp --parents {} /destination_dir \;
done

L'utilisation de find avec chacune de ces expressions REGEX fonctionne, mais la boucle tirant les expressions REGEX de mon fichier .txt ne fonctionne pas ne fais rien.


4 commentaires

Le problème, ce sont les guillemets dans le fichier; ils ne sont pas destinés à faire partie de l'expression régulière. Vous devez simplement les supprimer du fichier.


N'ai-je pas besoin d'avoir les guillemets pour protéger l'espace blanc autour du tiret?


Non; c'est à cela que servent les guillemets dans la ligne de commande, -regex "$ line" vs -regex $ line .


Merci, cela a fonctionné après avoir effectué un ajustement sur le fichier REGEX. Le problème que j'avais était que le fichier .txt avait été créé sous Windows et avait des marqueurs de fin de ligne incorrects. J'ai utilisé dos2unix pour le réparer.


3 Réponses :


0
votes
for i in $(cat hit_images_regex_list.txt); do find -name "$i" | cat -n | while read n f; do cp "$f" /newfolder/path/"$n".tig; done; done
this should open the file and for each regex (line) find all files that match and copy to a new folderdoes this help

0 commentaires

0
votes

Essayez ceci.

while IFS= read -r line; do
  find . -regex "$line" -exec cp --parents {} /destination_dir \;
done < hit_images_regex_list.txt


0 commentaires

0
votes

Les gens ont pris le temps d'essayer d'aider. Veuillez noter nos réponses de politesse


0 commentaires