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