如何访问名称中带有空格的文件/目录?

如何访问名称中带有空格的文件/目录?

通过终端,我无法访问名称中带有空格的文件或目录。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[@] 

相关内容