Как переименовать файлы, чтобы все команды bash функционировали корректно?

Как преобразовать строку имени файла с использованием специальных символов в корректную команду для bash на Python? Пример: из "cat ./That's my great book.txt" в "cat ./That"'"s" "my" "great" "book.txt".
  • 3 декабря 2023 г. 14:58
Ответы на вопрос 3
В Python вы можете использовать модуль `shlex` для безопасного форматирования строк для использования в shell/bash. Вот как это сделать:

```python
import shlex


def safe_format_bash_command(cmd, file_name):
    safe_file_name = shlex.quote(file_name)
    return cmd.format(safe_file_name)


command = "cat {}"
file_name = "That's my great book.txt"
safe_command = safe_format_bash_command(command, file_name)

print(safe_command)
```

После выполнения этого кода `safe_command` будет:

```
cat 'That'\''s my great book.txt'
```

Это безопасная строка, которую можно передать в bash. Это работает, потому что `shlex.quote()` корректно экранирует все специальные символы в строках, которые можно использовать в bash. 

Если вы хотите переименовать файл, вам нужно использовать команду `mv` вместо `cat`. И точно так же можно безопасно форматировать новое имя файла. 

Например:

```python
command = "mv {} {}"
old_file_name = "/path/That's my great book.txt"
new_file_name = "/newpath/That's my even better book.txt"
safe_command = safe_format_bash_command(command, old_file_name, new_file_name)

print(safe_command)
```

Здесь `safe_format_bash_command()` должна быть изменена, чтобы принимать и безопасно форматировать несколько строк.
Использование shlex.quote() для безопасной обработки аргументов в командной строке, в том числе аргументов с пробелами или специальными символами. 
 Используйте функцию shlex.quote() чтобы корректно и безопасно задать аргументы для командной строки, предотвращая проблемы с пробелами и спецсимволами.
Похожие вопросы