0
votes

Comment exclure de manière dynamique des fichiers de la sortie LS?

J'exécute la commande:

echo $(ls -p "/root/arch" -1tr $(ls -1tr /root/pids/*.lock | awk -F/ '{print $NF}' | grep -Po '.*(?=\.)' | while IFS= read -r line; do echo "-I \"$line\" "; done) | grep -v / )
20190107224626.ogg 20190107224705.ogg 20190107224720.ogg 20190107224645.ogg


4 commentaires

Quel est l'objectif de la commande finale? Est-ce que doit seulement répertorier les fichiers de / racine / arcade qui n'ont pas de fichier .lock?


@Aidanlovelace, oui.


Si vous le souhaitez trier par date de création (ou voulez-vous dire nom de fichier, car ils sont datés numériques?), Pourquoi utilisez-vous -s ? Cela devrait être trier par taille.


@Paulhodges, je suis déjà confondu avec les commandes, au lieu de -s je devais utiliser -tr


3 Réponses :


0
votes

S'il y a une chose que j'ai apprise dans mon court délai de lecture, des questions étiquetées étiquetées , c'est que l'analyse de la sortie de ls est frontale sur.

Une approche alternative est ci-dessous. Il iTère sur chaque fichier dans arch / , et s'il ne trouve aucun nom de fichier correspondant avec un .lock suffixe dans pids / , il génère le nom de fichier : xxx

résultat: xxx


8 commentaires

[$ (($)] n'est pas génial non plus (il n'y a pas de savoir combien d'arguments séparés vers [ votre trouver Les résultats seront séparé en). Et il n'y a aucune raison d'ici: si [-E /root/pids/arline.lock]]; puis écho "$ ligne"; fi fait un travail parfaitement bon.


... aussi, trouver ... -Printf '% f \ n' | Alors que la ligne de lecture va mal se conduire avec des noms de fichiers se terminant dans des espaces blanche ou des noms de fichiers contenant des littéraux de barreaux au dos; Mieux vaut utiliser trouver ... -Printf '% f \ 0' | tandis que ifs = lire -r -d '' ligne; faire , ce qui se comporte bien avec tous les noms possibles.


@CharlesDuffy Blast .. Clairement, j'ai besoin de relire la liste des pièges. J'ai mis à jour ma réponse avec votre recommandation. Merci.


Est-ce que cela trit par taille de fichier?


@Paulhodges négatifs .. est-ce une exigence d'OP que je ne vois pas?


Son ls utilise -s , donc j'ai supposé donc.


@Paulhodges ah, je vois .. Je suis d'accord avec votre commentaire sur la question que ce n'est pas clair exactement quelle est la condition de tri.


Je vous ai tous confus, l'exigence de trier par date de création, c'est-à-dire que je voulais utiliser -tr, au lieu de -s. J'ai corrigé ma question.



0
votes

Voici une doublure unique relativement simple pour le faire à l'aide de la manipulation de flux:

ls -p /root/{arch,pids} | grep -v / | sed 's/\.lock//g' | sort | uniq -u | xargs -l


0 commentaires

0
votes

Si je vous comprends correctement -

echo $(
  for f in /root/arch/*               # get each item
  do n="${f##*/}"                     # strip path
     [[ -e "/root/pids/$n.lock" ]] || # if there's NO matching lock
         printf "%s\n" "$n"           # then print the stripped filename
  done | sort -n                      # through a numeric sort
)                                     # to be stacked on one line by echo


1 commentaires

Probablement, mais en règle générale, j'évite pas quoi que ce soit quand c'est facile et ne complique pas vraiment la logique. YMMV, mais cela va faire l'évaluation en interne de toute façon, donc je préfère la façon dont ces documents auto-automatiques. C'est une question de goût. Une ligne supplémentaire pour la clarté n'est pas une grosse affaire et me donne un endroit où mettre un commentaire à côté de cela. ; OD mais puisque vous en parlez, je déteste aussi BLOAT, alors peut-être qu'un ou est meilleur ici.