3 votes

Certains fichiers ont un '?' à la fin de leur nom, et je dois trouver ces fichiers.

Je n'ai aucune idée de la manière dont ces fichiers ont été créés, mais voici à quoi cela ressemble avec ls -lh :

total 8.1G
-rw-r--r--  1 root root 1.6G Apr 13  2022 test_some_data_S6_R2.fastq.gz?
-rw-r--r--  1 root root 1.5G Apr 13  2022 test_some_data_S6_R1.fastq.gz

Lorsque j'utilise ls pour obtenir le nom du fichier en auto-complétion, cela ressemble à ceci -

ls /path/to/file/test_some_data_S6_R2.fastq.gz^M

^M est censé être le retour de la porteuse dans le DOS, donc à mon avis, quelqu'un a pu copier le nom d'un système Windows et l'a utilisé pour nommer le fichier. Il existe de nombreuses méthodes pour remplacer ^M dans le contenu du fichier, mais dans mon cas, je veux trouver les fichiers avec ^M dans son nom.

J'ai essayé find /path/with/files/ -iname "^M" mais sans succès. J'ai essayé de m'échapper avec \ mais toujours pas de résultat. Je me connecte à un RHEL machine en utilisant MobaXTerm, j'ai donc essayé le raccourci Windows CTRL + Q , CTRL + M mais il masque la fenêtre de travail en cours et n'insère pas d'informations sur l'état d'avancement du projet. ^M .

4voto

choroba Points 17339

En bash, vous pouvez utiliser $'\r' pour insérer le ^M caractère de contrôle.

find /path/with/files -name '*'$'\r'
  • iname n'est pas nécessaire car l'expression globale ne contient pas de lettres
  • un astérisque doit être inclus pour faire correspondre le nom avant le ^M

J'ai même pu entrer dans ^M directement sur une ligne de commande bash par la combinaison de Ctrl + v Ctrl + m . La clé réelle peut dépendre de bind et son affectation de quoted-insert .

find /path/with/files -name '*^M'

3voto

Geeky51 Points 71

Voici une petite variante de la méthode qui @choroba a posté dans sa réponse .

Dans un éditeur de texte, créez un petit script (appelé myscript ici) qui ressemble à ceci

#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls 

La seule astuce consiste à insérer le caractère ^M littéralement, et il existe des astuces spéciales pour le faire en fonction de l'éditeur de texte. Dans vi ou vim, c'est ctrl - K . Dans emacs, c'est ctrl - Q . Utilisez ce qui est nécessaire.

Ensuite, rendez le script exécutable :

chmod 755 myscript

Exécutez ensuite le script. ./myscript . Il ne devrait lister que les fichiers se terminant par l'extension ^M caractère. S'il fait ce que vous voulez, changez le xargs -0 ls a xargs -0 rm -f et exécutez à nouveau le script pour supprimer les fichiers

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