Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает file, чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа /path/to/file: type/subtype, где type/subtype - тип MIME. Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.
#!/bin/bash
# usage:
# fixmime ./{**/,}*
file --mime-type "$@" |
while read -r line; do
file=${line%:*}
type=${line##* }
case $type in
#Audio
audio/x-flac) ext=flac;;
audio/mpeg) ext=mp3;;
application/ogg) ext=ogg;;
#Video
video/mp4) ext=mp4;;
video/x-flv) ext=flv;;
application/octet-stream) ext=webm;;
application/x-shockwave-flash) ext=swf;;
#Images
image/png) ext=png;;
image/jpeg) ext=jpg;;
image/gif) ext=gif;;
image/x-ico) ext=ico;;
#Text
text/plain) ext=md;; #markup your notes, even when they are plain
text/html) ext=html;;
text/x-pascal) ext=py;;
text/x-c++) ext=js;; #conflicts with .cpp, so use prefered
text/x-c) ext=scss;; #usualy it is .c
text/x-shellscript) ext=sh;;
application/pdf) ext=pdf;;
#Fonts
application/x-font-ttf) ext=ttf;;
application/vnd.ms-opentype) ext=otf;;
#Archive
application/x-gzip) ext=tar.gz;;
application/x-bzip2) ext=tar.bz;;
*) continue;;
esac
[[ $file = *.$ext ]] || mv -i -- "$file" "$file.$ext"
done
Сохраните сценарий как ~/bin/rename-based-on-content-type (или что вам угодно) и сделайте его исполняемым (chmod +x ~/bin/rename-based-on-content-type). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов /path/to/music/directory, которое вы хотите пройти рекурсивно, вызовите скрипт как
~/bin/rename-based-on-content-type /path/to/music/directory/{**/,}*
Я получил это отсортировано - я удалил все свои ключи и файлы ключей из обеих систем и проработал процесс создания новых файлов ключей и использовал ssh-copy-id для копирования файлов. Теперь он отлично работает.
Должно быть, некоторая неясная коррупция в файле authorizes_keys может испортить ее. Еще раз спасибо.
Вы должны сделать следующие действия, чтобы сделать scp над ssh без пароля:
ssh-keygen
[Enter]
[Enter]
[Enter]
cd ~/.ssh
ssh-copy-id -i id_rsa.pub username@serverip/hostname
scp username@serverip:/file/to/copy /directory/to/save
Это будет работать, если вы получили какую-либо ошибку, пожалуйста, обновите.
Кажется, что вы скопировали ключ root на удаленный сервер, в то время как обычный пользовательский ключ не был скопирован правильно.
ssh и scp должны предоставлять такую же обратную связь ( с разницей login-in-remote-server и copy-file-in-remote-server)
Когда ключ-пара будет скопирован по мере необходимости на удаленный сервер, команда scp будет:
scp local-file-name user@remote-host:/full/path/remote-file-name
Чтобы скопировать ключ пользователя на удаленный сервер, вы можете использовать ssh-copy-id
Примечание: вы должен заменить mykey в приведенной ниже команде с именем файла вашего ключевого файла. Чтобы скопировать ключ пользователя на удаленный сервер, вы можете использовать
После того, как был создан ключ SSH, команда ssh-copy-id может быть использована для установки в качестве авторизованного ключа на сервере.
Для копирования ключа SSH используйте следующую команду:
ssh-copy-id -i ~/.ssh/mykey user@host
Это входит в систему хост сервера и копирует ключи на сервер и настраивает их для предоставления доступа, добавляя их в файл authorized_keys. Копирование может потребовать пароль или другую аутентификацию для сервера.
Только открытый ключ копируется на сервер.
Проверить новый ключ
После того, как ключ был скопирован, лучше проверить его:
ssh -i ~/.ssh/mykey user@host
Теперь логин должен быть заполнен без запроса пароля. Обратите внимание, однако, что команда может запросить кодовую фразу, которую вы указали для ключа. Поиск и устранение неисправностей
Я получил это отсортировано - я удалил все свои ключи и файлы ключей из обеих систем и проработал процесс создания новых файлов ключей и использовал ssh-copy-id для копирования файлов. Теперь он отлично работает.
Должно быть, некоторая неясная коррупция в файле authorizes_keys может испортить ее. Еще раз спасибо.
Вы должны сделать следующие действия, чтобы сделать scp над ssh без пароля:
ssh-keygen
[Enter]
[Enter]
[Enter]
cd ~/.ssh
ssh-copy-id -i id_rsa.pub username@serverip/hostname
scp username@serverip:/file/to/copy /directory/to/save
Это будет работать, если вы получили какую-либо ошибку, пожалуйста, обновите.
Кажется, что вы скопировали ключ root на удаленный сервер, в то время как обычный пользовательский ключ не был скопирован правильно.
ssh и scp должны предоставлять такую же обратную связь ( с разницей login-in-remote-server и copy-file-in-remote-server)
Когда ключ-пара будет скопирован по мере необходимости на удаленный сервер, команда scp будет:
scp local-file-name user@remote-host:/full/path/remote-file-name
Чтобы скопировать ключ пользователя на удаленный сервер, вы можете использовать ssh-copy-id
Примечание: вы должен заменить mykey в приведенной ниже команде с именем файла вашего ключевого файла. Чтобы скопировать ключ пользователя на удаленный сервер, вы можете использовать
После того, как был создан ключ SSH, команда ssh-copy-id может быть использована для установки в качестве авторизованного ключа на сервере.
Для копирования ключа SSH используйте следующую команду:
ssh-copy-id -i ~/.ssh/mykey user@host
Это входит в систему хост сервера и копирует ключи на сервер и настраивает их для предоставления доступа, добавляя их в файл authorized_keys. Копирование может потребовать пароль или другую аутентификацию для сервера.
Только открытый ключ копируется на сервер.
Проверить новый ключ
После того, как ключ был скопирован, лучше проверить его:
ssh -i ~/.ssh/mykey user@host
Теперь логин должен быть заполнен без запроса пароля. Обратите внимание, однако, что команда может запросить кодовую фразу, которую вы указали для ключа. Поиск и устранение неисправностей