Grâce au terminal, je ne peux pas accéder aux fichiers ou aux répertoires avec des espaces dans leurs noms. La commande cd
indique no such file or directory
.
Y at-il un moyen de le faire ou dois-je renommer tous les fichiers avec des espaces?
Pour accéder à un répertoire contenant un espace entre le nom, utilisez \<space>
pour y accéder. Vous pouvez aussi utiliser Tab bouton pour compléter automatiquement le nom.
Par exemple :
guru@guru-Aspire-5738:~$ cd /media/Data/My\ Data/
guru@guru-Aspire-5738:/media/Data/My Data$.
Pour utiliser des fichiers avec des espaces, vous pouvez utiliser le caractère d'échappement ou les guillemets.
exemple:
cd new\ dir/
\
est appelé caractère d'échappement, utilisé pour ne pas agrandir l'espace, donc bash lit maintenant l'espace dans le nom du fichier.
Ou vous pouvez utiliser:
cd "new dir"
Maintenant, pour renommer des fichiers, il est si facile de renommer tous les fichiers avec des espaces et de remplacer l’espace par des traits de soulignement:
for file in * ; do mv "$f" "${f// /_}" ; done
regardez la réponse ici il y a un script pour renommer tous les fichiers et répertoires de manière récursive.
Le script est: (Tous les droits vont à son propriétaire)
#!/bin/bash
# set -o xtrace # uncomment for debugging
declare weirdchars=" &\'"
function normalise_and_rename() {
declare -a list=("${!1}")
for fileordir in "${list[@]}";
do
newname="${fileordir//[${weirdchars}]/_}"
[[ ! -a "$newname" ]] && \
mv "$fileordir" "$newname" || \
echo "Skipping existing file, $newname."
done
}
declare -a dirs files
while IFS= read -r -d '' dir; do
dirs+=("$dir")
done < <(find -type d -print0 | sort -z)
normalise_and_rename dirs[@]
while IFS= read -r -d '' file; do
files+=("$file")
done < <(find -type f -print0 | sort -z)
normalise_and_rename files[@]