Похожие вопросы

Каково значение имен файлов Windows, которые имеют шестнадцатеричные числа в них, как {ED7BA470-8E54-465E-825C-99712043E01C}?
Открытие файлов или папок, содержащих пробел, из Powershell
В чем разница между filename и./ filename в Linux
Mac OS: как я могу переименовать файл, например APP 001.gif в 01.gif?
Какие символы недопустимы для имени файла MS-DOS?
Как удалить файл с слишком длинным путем для удаления [дубликат]
Как удалить файл в Windows с слишком длинным именем? [дубликат]
Создание сценария BASH " для " обрабатывать имена файлов с пробелами (или обходной путь)
Создание XLS или CSV из имен файлов в папке на Windows?
Trim имена файлов Tarballs с помощью Bash
Слишком длинные имена файлов и Windows не удается открыть файлы
Какие файлы/каталоги, правила именования в Linux?
При переименовании, как я могу отключить Windows 7 выделяя все имя файла, когда я click'n'Drag через часть его?
Как найти и заменить символ в именах файлов в Windows 7 с помощью проводника?
Нераспознанный символ в имени файла (linux)

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

Как удалить пробелы из имен файлов и папок? (Я на ОС Х 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

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

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

5
задан CajunLuke
источник

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 2012-03-27 18:33:35
источник

Другие вопросы filenames osx-snow-leopard whitespace