Через терминал я не могу получить доступ к файлам или каталогам с пробелами в их именах. То cd команда говорит no such file or directory.
Есть ли какой-нибудь способ сделать это или я должен переименовать все файлы с пробелами?
Через терминал я не могу получить доступ к файлам или каталогам с пробелами в их именах. То cd команда говорит no such file or directory.
Есть ли какой-нибудь способ сделать это или я должен переименовать все файлы с пробелами?
Чтобы получить доступ к каталогу, имеющему пробел между именем, используйте \<space> чтобы получить к нему доступ. Вы также можете использовать Tab кнопка для автоматического заполнения имени.
Например :
guru@guru-Aspire-5738:~$ cd /media/Data/My\ Data/guru@guru-Aspire-5738:/media/Data/My Data$.
Чтобы использовать файлы с пробелами, вы можете либо использовать escape-символ, либо использовать двойные кавычки.
пример:
cd new\ dir/\ называется escape-символом, используется для того, чтобы не расширять пробел, поэтому теперь bash считывает пробел как часть имени файла.
Или вы можете использовать:
cd "new dir" Теперь, чтобы переименовать файлы, так просто переименовать все файлы с пробелами и заменить пробел подчеркиванием:
for file in * ; do mv "$f" "${f// /_}" ; doneпосмотрите на ответ здесь существует скрипт для рекурсивного переименования всех файлов и каталогов.
Сценарий таков: (Все права переходят к его владельцу)
#!/bin/bash# set -o xtrace # uncomment for debuggingdeclare 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 fileswhile 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[@]