我这里有 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
这应该够了吧。
在正确的目录中运行它,或者给它一个目录作为参数。