Linux - Замена пробелов в именах файлов

Они имеют" Введение в Искусство Поблочного тестирования " на Зоне Разработчика Зенда, которая покрывает PHPUnit.

86
задан Peter Mortensen 30 March 2015 в 12:16
поделиться

8 ответов

Это должно сработать:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
153
ответ дан 24 November 2019 в 07:57
поделиться

Я предпочитаю использовать команду 'rename', которая принимает регулярные выражения в стиле Perl:

rename "s/ /_/g" *

Вы можете выполнить пробный прогон с флагом -n:

rename -n "s/ /_/g" *
61
ответ дан 24 November 2019 в 07:57
поделиться

Используйте sh ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

Если вы хотите попробовать это перед нажатием на спусковой крючок, просто измените mv на echo mv .

]
14
ответ дан 24 November 2019 в 07:57
поделиться

Если вы используете bash:

for file in *; do mv "$file" ${file// /_}; done
4
ответ дан 24 November 2019 в 07:57
поделиться

Цитируйте ваши переменные:

for file in *; do echo mv "'$file'" "${file// /_}"; done

Удалите «эхо», чтобы выполнить фактическое переименование.

1
ответ дан 24 November 2019 в 07:57
поделиться
0
ответ дан 24 November 2019 в 07:57
поделиться

Попробуйте что-нибудь подобное, предполагая, что все ваши файлы были в формате .txt:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
1
ответ дан 24 November 2019 в 07:57
поделиться

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

Ну, я сам нашел ответ. Не самое элегантное решение (также пытается переименовать файлы, не соответствующие условию), но оно работает. (Кстати, в моем случае мне нужно было переименовать файлы с "% 20", а не с подчеркиванием)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done
4
ответ дан 24 November 2019 в 07:57
поделиться
Другие вопросы по тегам:

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