Як видалити пробільний символ (пробіл) з кінця імен і папок?


4

Проблема з mac полягає в тому, що він дає пробільний символ у кінці файлу чи папки. Якщо цей файл або папка з символом пробілу в кінцевому підсумку буде скопійовано на FTP за допомогою Filezilla або Dropbox, тоді mac створює папки з "Foldername_WhiteSpaceConflict". Щоб позбутися цієї проблеми, усі файли та папки з символом пробілу потрібно перейменовувати без пробілу. Яке рішення може бути найкращим за допомогою терміналу чи якоїсь програми?


Автоматизатор може бути корисним, якщо ви не програміст.
james.garriss

Відповіді:


4

Ось сценарій пошуку та видалення пробілу з файлів та режимів:

#!/bin/bash                                                                                                                                                                                                        

IFS=$'\n'
for file in $(find -d . -name "* ")
do
  target_name=$(echo "$file" | sed 's/[ \t]*$//')
  if [ "$file" != "$target_name" ]; then
      if [ -e "$target_name" ]; then
          echo "WARNING: $target_name already exists, file not renamed"
      else
          echo "Move $file to $target_name"
          mv "$file" "$target_name"
      fi
  fi
done

1
Що трапиться, якщо у вас файл, який закінчується у просторі, в готелі, що закінчується в просторі - чи не буде в файлі неправильної назви після перейменування dir
Марк

Добре, оновив мою відповідь :)
Матеуш Шлосек

-dТут важлива позиція , також я додав чек, щоб запобігти mvперезапису існуючих файлів.
nohillside

1

Довелося ще трохи виправити сценарій. Для файлів або папок, що закінчуються літерою 't', вона також буде видалена. І дзвінок перевірити, чи файл не працює належним чином, тому змінив "target_name" на $ target_name і він працює зараз.

#!/bin/bash                                                                                                                                                                                                        

IFS=$'\n'
for file in $(find -d . -name "* ")
do
  target_name=$(echo "$file" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
  if [ "$file" != "$target_name" ]; then
      if [ -e $target_name ]; then
          echo "WARNING: $target_name already exists, file not renamed"
      else
          echo "Move $file to $target_name"
          mv "$file" "$target_name"
      fi
  fi
done

Це прекрасно працювало для мене! Дякую!
Уес Ларсон

1

Існує програма для Mac під назвою " Ім'я Mangler ", це зробить усе, що ви могли зробити, для імені файлу / папки, і ви навіть можете створити власний код і використовувати його в додатку. Існує безкоштовна пробна версія, яка дає вам 4 необмежені спроби, і ви можете повернути імена назад, якщо ви помилилися.


0

Щось подібне повинно працювати:

ruby -e "Dir.glob('* ').each { |name| File.rename name, name.chomp(' ') }"

Це видалить пробіли з кожного файлу / dir у pwd.

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