Не полностью уверенный, что Вы спрашиваете...
Скажите, что у Вас есть псевдоним SSH для 'mainserver', таким образом, можно сделать ssh mainserver
. Если Вы хотите, чтобы это также работало на ping mainserver
, необходимо вставить псевдоним /etc/hosts
, как так:
/etc/hosts:
192.168.0.1 comp-one
192.168.0.2 comp-two
192.168.0.20 mainserver
Затем Вы могли сделать ping mainserver
и это проверило бы с помощью ping-запросов 192.168.0.20.
Всегда заключайте свои замены в кавычки. Не добавляйте побочные кавычки к своим строкам.
foo="${file#...}"
bar="${file%...}"
baz="$file"
Ваш вопрос чрезвычайно долог и труден следовать. Вот некоторые ошибки, которые я поймал, могут быть другие.
do read FILENAME;
Это разделяет пробел вначале и конец строки, и выполняет расширение обратной косой черты (таким образом, все обратные косые черты удалены кроме после другой обратной косой черты). Для обработки одной строки буквально использовать
do IFS= read -r FILENAME
Настоящая проблема, с которой Вы сталкиваетесь, является, вероятно, этим:
rm "\"${differentquotes}\""
Вы добавляете символ "
перед именем файла и символом "
после имени файла. Вы говорите rm
удалить файл, имя которого начинается и заканчивается a "
символ. Вы, вероятно, означали удалять файл, имя которого является значением переменной differentquotes
(чье имя не отражает свое значение). Удалить файл, имя которого является значением переменной differentquotes
, использовать
rm -- "$differentquotes"
( --
то, в случае, если аргумент начинается -
; это не необходимо с кодом, который Вы показываете здесь с тех пор find
всегда распечатывает имена, которые не начинаются -
и если я считал Ваше преобразование правильно, оно не рискует представлять то.)
Основное правило правильно обработать имена файлов с пробелом и другими специальными символами состоит в том, чтобы всегда помещать двойные кавычки вокруг замен команды и переменной. Это "$foo"
— кавычки являются частью синтаксиса оболочки. Если Вы имеете \"
где-нибудь, это делает "
характерная роль строки вместо части синтаксиса оболочки.
После этого Вы, кажется, попытались удалить пробелы и вставить их назад. Вы сделали ту же ошибку добавления побочных символов кавычки в том, что Вы используете в качестве имени файла. Кроме того, Вы не можете отложить пробелы, которые Вы удалили — Вы не знали бы сколько пробелов возвращаться или где.
Это должно сделать это. Заметьте двойные кавычки вокруг переменных, представляющих имена файлов с пробелами. Обязательно замените .mp3 любым расширением, которое Вы хотите.
#!/bin/bash
LOCATION="/path/to/file"
for FILE in $LOCATION/*; do
if [[ $FILE == *.mp3 ]]; then
NEWNAME=`echo $FILE | tr '\ ' _`
echo "File name was ${FILE}. File name without spaces is $NEWNAME"
#uncomment this next line to move the file to the new name without spaces
mv "$FILE" $NEWNAME
#uncomment this next line if you want to instead remove the file
#rm "$FILE"
fi
done
if
оператор, если Вы используете for FILE in $LOCATION/*.mp3
– glenn jackman
18.12.2013, 20:29
Шаги, которые я сделал, находятся в комментариях ниже:
# rename old file regardless of how messes up or not
# it is using basename to get information needed
killfile="${pref}.${ext}"
# copy old file name to a different file name
# using the mv command
# mv ${old file name.ext} ${oldfile name//search pattern/replace with]
# gives you a new file with what ever you named it
mv "$killfile" "${killfile//*/killme.k}"
#the then just delete it
rm "killme.k"
Путем выполнения его этот путь I, нашел, что система будет видеть его таким образом, это устранило мой файл, не добираясь no such file or directory error
- то, что я добирался.
case
. – Gilles 'SO- stop being evil' 09.12.2013, 00:16