Actuellement, le répertoire créé automatiquement pour un programme avec lequel je travaille comprend des deux points (:
), ce qui crée des problèmes lorsque je tente de manipuler le répertoire. Quelqu'un pourrait-il m'aider d'abord à supprimer ce signe deux-points, puis à pouvoir cd
dans le répertoire renommé? (Donc je suppose que je devrais égaler le nouveau nom du répertoire en une variable?)
Exemple:
Lang-32b-Branch:Line
Lang-32b-BranchLine
Pour y parvenir manuellement, vous pouvez utiliser la commande mv
de manière simple, avec des guillemets puissants pour vous assurer que le shell n'interprète pas les deux points comme un caractère spécial:
mv 'Lang-32b-Branch:Line' 'Lang-32b-BranchLine' && cd 'Lang-32b-BranchLine'
Une autre approche consiste à utiliser une variable et l'une des fonctionnalités de développement du paramètre Bash, ce qui peut s'avérer plus utile si vous souhaitez automatiser ce changement de nom de répertoire dans un script:
dir=Lang-32b-Branch:Line
mv "$dir" "${dir//:/}"
Le développement de "${dir//:/}"
remplacera toute occurrence du caractère deux-points par rien, donnant le résultat attendu de Lang-32b-BranchLine. Utiliser "${dir/:/}"
n'entraînera que la suppression de la première occurrence du colon, bien que cela fonctionne toujours pour votre exemple donné.
En tant que one-liner à déplacer et cd dans le répertoire:
dir=Lang-32b-Branch:Line ; mv "$dir" "${dir//:/}" && cd "${dir//:/}"
Ou si vous souhaitez capturer le nom du répertoire modifié dans une variable nommée new_dir:
dir=Lang-32b-Branch:Line ; new_dir="${dir//:/}"; mv "$dir" "$new_dir" && cd "$new_dir"
Un excellent guide pour l'expansion des paramètres Bash est disponible ici .
Si vous souhaitez qu'une commande générale renomme plusieurs fichiers et/ou répertoires avec un ou plusieurs deux points, vous pouvez utiliser rename
name__,
rename 's/://g' *
Après cela, vous pouvez cd
dans l’un des répertoires (que vous avez modifiés) comme d’habitude (sans guillemets).
Ligne de commande alternative en fonction des conseils donnés dans les commentaires de @DavidFoerster et @dessert,
rename 's/://g' *\:*/
Modifier:
@EliahKagan suggère de commencer par un "parcours d'essai" avec l'option -n,
rename -n 's/://g' *
qui affiche simplement quelles opérations de changement de nom seraient effectuées. Ensuite, il peut être exécuté à nouveau avec l'option -n supprimée pour renommer les fichiers. Cela permet d'éviter des erreurs telles que le renommage accidentel d'un groupe de fichiers que l'on voulait réellement laisser seul.
S'il ne s'agit que du seul répertoire, vous pouvez utiliser mv
et cd
. Pour utiliser la puissance de bash
History Expansion et le paramètre spécial $_
:
mv Lang-32b-Branch:Line !#:$:s/:/ && cd $_
!#:$:s/:/
est remplacé par le dernier mot ($
) de la ligne de commande actuelle (!#
), où le premier :
est s
et n'est pas remplacé par rien. Si vous souhaitez supprimer tous les deux-points , remplacez-le par !#:$:gs/:/
(g
lobally). $_
est simplement remplacé par le dernier argument de la dernière commande.