50 votes

Supprimer le chemin de la sortie de la commande find

J'ai un script bash pour déployer du code d'un environnement bêta vers un environnement de production mais actuellement je dois ajouter la liste des fichiers à un fichier txt manuellement et parfois j'en oublie certains. Fondamentalement, mon script de déploiement cat/boucles copie les fichiers. (exporte/importe également la base de données mais ce n'est pas pertinent..lol)

Quoi qu'il en soit, j'aimerais utiliser la commande find pour générer une liste de fichiers modifiés au cours des 14 derniers jours. Le problème est que je dois supprimer le chemin ./ pour que le script de déploiement fonctionne.

Voici un exemple d'utilisation de la commande find :

find . -type f -mtime -14 > deploy.txt

Voici la ligne qui cat deploy.txt dans mon script de déploiement :

for i in `cat deploy.txt`; do cp -i /home/user/beta/public_html/$i /home/user/public_html/$i; done

Une idée de comment réaliser cela en utilisant un script bash ?

Merci !

3voto

Jonathan Points 1

Une solution rapide, si je comprends correctement la question, consiste à utiliser cut sur la sortie de la commande find :

$> find . -type f -mtime -14 | cut -b 3- > deploy.txt

Cela supprimera les deux premiers caractères de chaque ligne du résultat (dans votre cas ./). Probablement pas la meilleure solution, mais cela fonctionne dans votre scénario.

1voto

Samat Jain Points 165

sed est parfait pour ce genre de choses.

$ find . -type f -mtime -14 find . | sed 's/^\.\///' > deploy.txt

1voto

ghoti Points 765

Je ne sais pas de quel type de noms de fichiers il s'agit, mais tout ce qui comporte des espaces ou des sauts de ligne met la plupart des solutions ici en danger.

Ma suggestion serait d'utiliser l'expansion des paramètres de la coquille pour supprimer les caractères de chaque nom de fichier :

find . -mtime -14 -exec sh -c 'printf "${0#./}\n"' {} \; >deploy.txt

Si vous aimez vraiment vraiment les tubes, vous pourriez utiliser un délimiteur "sûr", comme un nul, avec xargs pour recevoir chaque nom de fichier :

find . -mtime -14 -print0 | xargs -0 -n 1 sh -c 'printf "${0#./}\n"' >deploy.txt

N'oubliez pas que la sortie de ceci n'est PAS contient des nuls, donc bien que cela puisse être suffisant pour une vérification visuelle, aucune de ces solutions ne produit un fichier deploy.txt qui est sûr à utiliser pour l'automatisation, sauf si vous êtes très confiant quant à vos noms de fichiers sources.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X