Как удалить пробелы из имен файлов и папок?

Как удалить пробелы из имен файлов и папок? (Я на ОС Х 10.6 Снежный Барс.)

Как указано ниже @Lri, я смог удалить конечные пробелы, используя это:

#!/bin/bash

IFS=$'n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/ *$//' <<< "$f")"
    done
done

сейчас я пытаюсь удалить пробелы с этого:

#!/bin/bash

IFS=$'n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/^ *//;s/ *$//' <<< "$f")"
    done
done

но это не работает.

что я делаю не так?

21
задан CajunLuke
14.02.2023 12:45 Количество просмотров материала 2950
Распечатать страницу

1 ответ

Я вижу две проблемы: во-первых, вам нужен find команда для поиска имен с пробелами в начале, а не в конце (-name ' *' вместо -name '* '). Во-вторых, f будет полным путем к файлу, а не только его именем; это означает, что пробелы находятся не в начале строки, а сразу после последней косой черты (например, "/Users/timoto/Desktop/ spacedfile"). Это немного сложнее в обращении; самый простой способ, о котором я думал, было разделить путь с помощью dirname и basename и удалить пробелы только из базовой части.

также, не должно быть никакой потребности побежать команда 9 времен на различных глубинах; как раз используйте -depth option (без номера), и он будет возвращать результаты в первом порядке глубины (т. е. самые глубокие файлы перед содержащими их каталогами), что должно предотвратить проблемы с каталогами, переименованными из-под обработки файлов в них.

IFS=$'\n'
find ~/Desktop -name ' *' -depth | while read f; do
    mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done

EDIT: моя команда basename/sed была более запутанной чем это должно быть; упростил его...

3
отвечен Gordon Davisson 2023-02-15 20:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх