Shell:修剪文件开头的空格

Shell:修剪文件开头的空格

我这里有 20k 个文件,其中至少有 1000 个在开头有空白。

例如,如何使用 sed 删除空格?问题是,它可能会出现一些重复的文件名。所以我需要在文件末尾添加一些内容。假设这是“[1]”。

这里是 osx,所以请确保您的示例也能在 UNIX 上运行。

答案1

您是想直接更改文件,还是创建不带前导空格的文件副本?

如果您进行就地更改,“重复的文件名”应该不是问题。

尝试以下方法:

find <directory> -type f -exec sed -i -e 's/^[[:space:]]*//' {} +

答案2

你的问题不是很清楚,但假设你的意思是文件名有前导空格,那么您需要循环遍历每个文件名,如果它有前导空格,则重命名它。

由于新名称可能已存在,因此您也必须检查它。

#!/bin/bash

# rename files with leading whitespace.
# append [1], [2], and so forth, if the new name exists, until an unused name is found.

rename_file() {
  local old="$1" new="$2" count=1
  if [[ ! -e "${new}" ]]; then
    mv -v "${old}" "${new}"
  else
    while [[ -e "${new} [${count}]" ]]; do
      count=$((count + 1))
      [[ "${count}" -gt 100 ]] && exit 9 # make sure we don't accidentally loop forever...
    done
    mv -v "${old}" "${new} [${count}]"
  fi
}

[[ -n "$1" ]] && cd "$1"

/bin/ls -1 . | grep $'^[ \t]' | while read file; do
  newname="$(echo "${file}" | sed -i -e 's/^[[:space:]]*//')"
  rename_file "${file}" "${newname}"
done

这应该够了吧。

在正确的目录中运行它,或者给它一个目录作为参数。

相关内容