web-dev-qa-db-fra.com

Comment accéder aux fichiers / répertoires avec des espaces dans le nom?

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?

9
Gokul

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$.
9
g_p

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[@] 
3
Maythux