Удалить начальные или конечные пробелы в именах файлов или папок

Я разработал аккуратный способ избавиться от дубликатов файлов. Вы знаете, те, которые содержат в своих именах "(1).", "(2).", "(3)." И т. Д. В окне терминала в командной строке вы вводите "rm " [обратная косая черта] "). ", но без кавычек. Это сделает это. [Обратная косая черта] "\" означает, что следующий символ принимается как просто символ, а не как часть пары круглых скобок. Это работает, когда больше ничего не будет. Кстати, я попытался ввести «\» в команду «rm», но она не отображалась должным образом, поэтому вместо этого я поместил туда термин [обратная косая черта].

Появление «\» в папке или имени файла также указывает на наличие пробела. Использование пробелов в именах встречается не так часто, если только вы не работаете с Windows. Windows просто заключает в квадратные кавычки «весь путь \ имя файла». Вы также можете сделать это в Ubuntu или просто поставить обратную косую черту "\" перед пробелом. Но что, если вы хотите заменить пробел другим символом? Как дефис или подчеркивание? Как бы вы сделали это для всех папок и файлов одновременно?

Или что, если вы решите просто убрать пробелы, просто соберите остальные символы вместе? Как бы вы это сделали?

И здесь есть сложность: просто избавьтесь от любых пробелов или пробелов. даже если присутствует более одного подарка.

И чтобы обернуть это, как обнаружить и удалить и файлы, которые полностью пусты. Или папки, которые пусты.

4
задан 1 September 2015 в 15:36

3 ответа

Я часто забываю приблизительно rename. Вот то, как сделать это с простым ударом:

$ touch "     leading spaces" "trailing spaces     "

$ printf ">%s<\n" *spaces*
>     leading spaces<
>trailing spaces     <

$ for f in *spaces*; do 
    new=${f##*([[:blank:]])}        # remove leading whitespace
    new=${new%%*([[:blank:]])}      # remove trailing whitespace
    mv "$f" "$new"
done

$ printf ">%s<\n" *spaces*
>leading spaces<
>trailing spaces<
0
ответ дан 2 September 2015 в 01:36

Для удаления пробелов, несколько подходов здесь: https://stackoverflow.com/questions/2709458/bash-script-to-replace-spaces-in-file-names https://stackoverflow.com/questions/15347843/remove-whitespaces-from-filenames-in-linux

Этот легкий: "Сначала введите каталог с CD: CD/my/directory и затем выполненный: для f в *; сделайте mv "$f" echo $f | tr ' ' '_'; сделанный"

Еще более простой: "переименуйте "s///g" *"

Для того, чтобы избавиться от пробелов, символов нижнего подчеркивания и дефисов: "переименуйте-i "s / [-_]//g" *"

Для того, чтобы избавиться от файлов, которые имеют нулевые байты: https://stackoverflow.com/questions/5475905/linux-delete-file-with-size-0

Для обработки или пустые файлы или папки, я нашел этого: "Удалите пустые файлы (удалите 'эхо' из команды): Код: найти. - пустой - тип f-print0 | xargs-0 комнат эха Удаляет пустые каталоги (удалите 'эхо' из команды): Код: найти. - пустой - тип d-print0 | xargs-0 эха rmdir" http://www.linuxquestions.org/questions/programming-9/bash-delete-empty-files-910203/

Кажется нечетным, что я ответил на свой собственный вопрос в течение половины часа, но это - питание поисковой системы при выборе правильных слов для поиска на. Однако существуют положения и условия, попросил, чтобы не производили готовых ответов, такой как с другим вопросом, который я отправил здесь на днях. Я исследовал его трудно сначала, не нашел результатов, так отправил его на AskUbuntu. Я проверил, и все еще никакой ответ. Вероятно, придется вернуться к выполнению поисков, если я могу думать, что еще спросить.

0
ответ дан 2 September 2015 в 01:36
  • 1
    Улучшите его, что является справедливой игрой для удаления, файлы, заканчивающиеся в .gz, .1, .old. Но никогда просто не удаляйте нормальные файлы журнала, это вызовет весь вид нежелательных признаков. – Videonauth 22 November 2016 в 20:31
  • Для удаления любого количества продвижения пробелов от имен файлов можно использовать rename (prename):

    rename -n 's/^ *//' *
    
  • Для удаления любого количества конечных пробелов от имен файлов можно использовать rename (prename):

    rename -n 's/ *$//' *
    

    Удаляют -n (пробный прогон), если Вы удовлетворены именами файлов.

  • Для удаления файлов или папок, которые пусты (рекурсивно):

    find . -empty
    

    Удовлетворенный? Позвольте действию произойти:

    find . -empty -delete
    

    Только в текущем каталоге:

    find . -maxdepth 1 -empty -delete
    

    Также использование -type f только для файлов и -type d только для каталогов, если Вы хотите.

Read man rename и man find для получения большей идеи.

0
ответ дан 2 September 2015 в 01:36
  • 1
    Чтобы быть честным, просто удаление основных файлов журнала повредит больше, чем решают что-нибудь. – Videonauth 22 November 2016 в 20:29

Другие вопросы по тегам:

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