Найти и переименовать файлы (включая каталоги), имена файлов которых содержат пробелы [дубликат]

Это был NetworkManager.

Выполнение systemctl stop mysqld httpd postfix ipmievd настроено atd rsyslog smartd crond irqbalance gssproxy polkit chronyd не помогло, но сделало таблицу процессов очень маленькой.

После systemctl stop NetworkManager я смог переименовать / home.

2
28.02.2016, 04:07
3 ответа

Переименование для каждого каталога очень просто:

rename 's/\s/_/g' *

Это позволит избавиться от всех пробелов в именах файлов в каталоге и заменить их на '_'. Если вы опустите 'g', он заменит только первый пробел в имени файла, так что не забывайте эту часть. * означает все файлы в каталоге, в котором он запущен.

rename 's/\s/_/g' /home/you/something/*

Заменил бы все пробелы в именах файлов в каталоге: / home / you / something /

Это не распространяется на просмотр многих каталогов, но в целом я бы так и поступил.

Мне нравятся подчеркивания, которые можно было бы заменить:

my file with spaces.txt

на

my_file_with_spaces.txt
4
27.01.2020, 21:50

Этот сценарий найдет все файлы в целевом каталоге и сгенерирует новый сценарий, который переименует все файлы, чтобы в них не было пробелов. Затем вы можете просмотреть сценарий на досуге перед выполнением:

#!/bin/bash
TARGET=/path/to/files
NEWSCRIPT=${HOME}/rename-spaced-files.sh

OLDIFS="${IFS}"
IFS="\n"
for file in $(find ${TARGET}/ -type f -name "* *"); do
    if [[ -f \"${file// /}\" ]]; then
        echo "# \"${file// /}\" already exists- come up with a new name for it and uncomment the next line" >> $NEWSCRIPT
        echo -n "# " >> $NEWSCRIPT
    fi
    echo "mv \"${file}\" \"${file// /}\"" >> $NEWSCRIPT

done
4
27.01.2020, 21:50

Хотя наличие пробелов в именах файлов абсолютно допустимо в Unix и ее файловых системах, вы должны позаботиться о том, чтобы вы указывали имена в кавычках, когда используете их с командами оболочки или из переменных, например. грамм. в скриптах. В противном случае оболочка передаст каждое слово команде как отдельный параметр.

VAR="existing file with spaces in name"

#This works
ls "${VAR}"

#This results in file(s) not found
ls ${VAR}

В дополнение к уже приведенным ответам вы также можете использовать команду mmv для переименования нескольких файлов, имена которых соответствуют шаблону, независимо от пробелов в именах, потому что с mmv у вас есть в любом случае процитировать исходный и целевой шаблон.

И бессовестно цитирую себя (каламбур не предназначен, но с радостью принят):

Практическое правило: Всегда используйте кавычки вокруг переменных оболочки, которые содержат строки при их раскрытии; они могут содержать пробелы или быть пустыми, что без кавычек часто сбивает с толку команду, которой они передаются (слишком много или отсутствуют параметры).

2
27.01.2020, 21:50

Теги

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