Como acessar arquivos / diretórios com espaços no nome? [duplicado]

6

Através do terminal não consigo acessar arquivos ou diretórios com espaços em seus nomes. O comando cd diz no such file or directory .

Existe alguma maneira de fazer isso ou devo renomear todos os arquivos com espaços?

    
por Gokul 27.08.2014 / 17:51

2 respostas

6

Para acessar um diretório com espaço entre o nome use \<space> para acessá-lo. Você também pode usar o botão Tab para completar automaticamente o nome.

Por exemplo:

guru@guru-Aspire-5738:~$ cd /media/Data/My\ Data/
guru@guru-Aspire-5738:/media/Data/My Data$.
    
por g_p 27.08.2014 / 17:54
2

Para usar arquivos com espaços, você pode usar o caractere de escape ou aspas duplas.

exemplo:

cd new\ dir/

\ é chamado de caractere de escape, usado para não expandir o espaço, então agora o bash lê o espaço como parte do nome do arquivo.

Ou você pode usar:

cd "new dir" 

Agora, para renomear arquivos, é tão fácil renomear todos os arquivos com espaços e substituir espaço por sublinhado:

for file in * ; do mv "$f" "${f// /_}" ; done

veja a resposta aqui existe um script para renomear todos os arquivos e dirs de forma recursiva.

O script é: (todos os direitos vão para o proprietário)

#!/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[@] 
    
por Maythux 15.06.2015 / 17:19