Puis-je supprimer un fichier de `inside` vi`?

-1

Je veux ouvrir plusieurs fichiers avec viou même lesset supprimer ceux qui ne me dérangent pas sans revenir au shell et passer au suivant.

utilisateur3634569
la source
2
Je peux me tromper, mais vous pouvez échapper à une coquille avec !, et je pense exécuter une commande comme ceci: !rm whateverfile.txt.
LawrenceC
@ultrasawblade Cela semble plausible.
un CVn
Que voulez-vous dire "supprimer" (fermez-le, supprimez-le, autre chose), et que voulez-vous dire quand vous dites "sans revenir en arrière et passer au suivant"? Revenir à quoi?
ernie

Réponses:

0

Avec vi, vous pouvez ouvrir plusieurs fichiers, de manière explicite ou par un caractère générique, par exemple:

vi 1.txt 2.txt
vi *.txt

Une fois ouverts, vous pouvez naviguer entre eux de différentes manières. :lsmontrera une liste des fichiers ouverts. Pour changer, vous pouvez utiliser le nom ou l'index, par exemple b1pour ouvrir le fichier 1 dans la liste ou b 1.txtpour basculer explicitement vers le fichier.

:net :pagira comme suivant et précédent respectivement.

:bd va fermer le fichier.

Ernie
la source
0

La question a de nombreuses interprétations, mais je suppose que vous voulez une sorte de visualiseur automatique qui vous demande si vous souhaitez conserver / supprimer un fichier. Une méthode pourrait être la suivante:

Étant donné une liste de fichiers:

#!/bin/bash

for f in "$@"; do
    less "$f"
    # head -n 10
    rm -i "$f"
done

Étant donné un répertoire qui contient les fichiers:

#!/bin/bash
dir="$1"

for f in "$dir/*"; do
    less "$f"
    # head -n 10
    rm -i "$f"
done

Dans les deux scripts, vous devrez quitter le lessprocessus en appuyant sur Qavant de pouvoir choisir de conserver ou de supprimer le fichier. Vous pouvez utiliser la head -n 10commande à la place pour éviter cela et n'afficher que les 10 premières lignes.

Exécutez-les à partir d'une ligne de commande et donnez-leur les paramètres corrects. Bonne chance.

arielnmz
la source
Vous pouvez remplacer l'intégralité de ces scripts de echotravers esac(inclus) avec simplement rm -i "$f"(je suggère également échapper au nom de fichier dans l'invocation, pour se prémunir contre des caractères spéciaux). -idemande à rm de demander confirmation, ce qui vous donne l'invite oui / non (et, en prime, respecte les paramètres régionaux de l'utilisateur).
un CVn
Merci pour la suggestion, j'ai corrigé le script pour utiliser votre méthode. Je vous remercie.
arielnmz
Cela fonctionne très bien, merci arielnmz et Michael.
user3634569