通过终端,我无法访问名称中带有空格的文件或目录。cd
命令显示no such file or directory
。
有什么办法可以做到这一点,或者我应该用空格重命名所有文件吗?
答案1
要访问名称之间有空格的目录,请使用\<space>
访问它。您还可以使用Tab按钮自动完成名称。
例如 :
guru@guru-Aspire-5738:~$ cd /media/Data/My\ Data/
guru@guru-Aspire-5738:/media/Data/My Data$.
答案2
要使用带有空格的文件,您可以使用转义字符或使用双引号。
例子:
cd new\ dir/
\
被称为转义字符,用于不扩展空格,所以现在 bash 将空格读取为文件名的一部分。
或者你可以使用:
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[@]