У меня есть 20k файлов здесь, и по крайней мере 1000 из них имеют пробел в начале.

Как я могу удалить пробел с помощью Sed например? Проблема в том, что могут появиться дублированные имена файлов. поэтому мне нужно что-то добавить в конец файла. Допустим, это будет "[1]".

Здесь есть osx, поэтому убедитесь, что ваши примеры работают и в UNIX.

2 ответа2

2

Вы хотите просто изменить файлы на месте или создать копию файлов без начальных пробелов?

Если вы сделаете изменение на месте, "дублированные имена файлов" не должны быть проблемой.

Попробуйте что-то вроде:

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

Ваш вопрос не очень понятен, но если вы подразумеваете, что имена файлов имеют начальные пробелы, то вы хотите перебрать каждое имя файла, и если оно имеет начальные пробелы, переименуйте его.

Поскольку новое имя может существовать, вы должны проверить это тоже.

#!/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

Это должно делать свое дело.

Запустите его, находясь в правильном каталоге, или дайте ему каталог в качестве аргумента.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .