Сначала я попробовал все в Как рекурсивно удалить конечные пробелы во всех файлах ? и https: // superuser.com/questions/402647/how-to-remove-trailing-whitespace-from-file-extensions-and-folders-snow, что не помогло.

Например, имя файла - "image.jpg ", и я хочу преобразовать его в "image.jpg".

Пожалуйста, помогите, он также должен быть рекурсивным. пример

-1
Séan M. Warren 31 Дек 2015 в 00:01

2 ответа

Лучший ответ

find . -depth ... - лучший ответ, но, к сожалению, он недоступен для вас (если вы не установите homebrew)

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

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

shopt -s globstar nullglob extglob
printf "%s\n" **/*[[:space:]] | sort -r | while IFS= read -r filename; do
    newname=${filename/%+([[:space:]])}
    mv "$filename" "$newname"
done
0
glenn jackman 30 Дек 2015 в 23:45

Дать этому шанс. (сначала сделайте резервную копию ваших данных)

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

Замените / tmp / своей папкой.

Для Apple, как насчет этого:

for oldname in *
do
  newname=`echo $oldname | sed -e 's/ //g'`
  mv "$oldname" "$newname"
done
1
arcee123 30 Дек 2015 в 21:15