Як видалити провідні пробіли з імен файлів і папок?


1

Як видалити провідні пробіли з імен файлів і папок? (Я працюю на OS X 10.6 Snow Leopard.)

Як зазначено нижче @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

але це не працює.

Що я роблю неправильно?

Відповіді:


3

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

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

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

EDIT: моя команда basename / sed була більш заплутаною, ніж вона повинна бути; спрощено ...


Дякуємо, що вказали -depth flag ... Я редагував моя відповідь на оригінальне запитання так само.
Lri

Тепер це не працює, як очікується, у MacOS 10.11.6 Тепер видаляє провідний і тренувальний простір з папок і провідний простір з імен файлів, але не виходить за межі імен файлів.
timoto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.