J'ai vu beaucoup de questions et réponses ici en utilisant une construction dans le sens de
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
ou
ls -t | while read i; do
Maintenant, je sais que vous ne devriez pas utiliser ls dans les scripts car il se casse facilement; mais je ne peux pas trouver une meilleure façon d'opérer sur les fichiers dans l'ordre de la dernière modification à la dernière modification (ou vice versa).
Je peux utiliser quelque chose comme:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... mais cela rompra toujours avec tous les fichiers qui ont des retours à la ligne dans leurs noms, et est beaucoup plus laid pour démarrer. Y a-t-il une meilleure façon?
--zero-terminated
- merci pour cela, j'aimerais pouvoir vous donner encore plus de points!info ls
: si je voulais un script pare-balles avec ls, lequel--quoting-style
devrais-je utiliser?--quoting-style=escape
c'est la façon de choisir.ls
--quoting-style
échoue (pour l'analyse des buts) car il ne cite que les noms de fichiers: lorsque vous avez un espace dans un nom de groupe. Ok, c'est un cas très strage, mais il apparaît dans le shell bash de cygwin, ici vous avez des noms de groupe commeDomain Users
.Le moyen le plus simple est de loin d'utiliser zsh. Le qualificatif glob
om
trie les correspondances dans l'ordre chronologique inverse; utiliserOm
pour l'ordre chronologique.Le
N
qualificatif glob entraîne le développement du modèle dans une liste vide si le répertoire est vide. Faites cela*(DNom)
pour faire correspondre les fichiers de points.la source