Bande point à partir des noms de fichiers de script bash
J'ai certains fichiers dans un tas de répertoires qui ont un point et sont donc cachés. Je voudrais revenir que et bande le point.
J'ai été infructueuses avec les éléments suivants:
for file in `find files/-type f`;
do
base=`basename $file`
if [ `$base | cut -c1-2` = "." ];
then newname=`$base | cut -c2-`;
dirs=`dirname $file`;
echo $dirs/$newname;
fi
done
Qui échoue sur le rapport de condition:
[: =: unary operator expected
En outre, certains fichiers ont un espace de fichier et renvoie les diviser.
Toute aide serait appréciée.
Quand vous dites
Oui, bande de le point
revert that
, entendez-vous renommez les fichiers sans dot?Oui, bande de le point
OriginalL'auteur Radek | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple de supprimer quelque chose dès le début d'une variable est d'utiliser
${var#pattern}
.Voir la page de manuel de bash:
Par ailleurs, avec une plus sélectif
find
commande vous n'avez pas besoin de faire tout le travail dur. Vous pouvez avoirfind
seul match de fichiers avec un point:Jeter que tous ensemble, puis:
Remarques supplémentaires:
De gérer les noms de fichiers avec des espaces correctement, vous devez avoir à citer les noms de variables lorsque vous faites référence à eux. Écrire "$fichier" au lieu de simplement
$file
.Pour plus de robustesse
-printf '\0'
etread -d $'\0'
utilisation NUL caractères délimiteurs de sorte que même les noms de fichiers avec embedded retours à la ligne'\n'
fonctionne.OriginalL'auteur John Kugelman
OriginalL'auteur arnaud576875
pouvez jeter à elle, même si ils ont
les espaces, retours à la ligne ou d'autres infâme
les personnages en leur nom.
ne pas avoir à changer le reste du script lorsque vous modifiez le chemin d'accès
donné à
find
*Note: j'ai inclus une
echo
de sorte que vous pouvez tester un dry-run. Retirez laecho
si vous êtes satisfait avec les résultats._: 1: _: Bad substitution
OriginalL'auteur SiegeX