Я понятия не имею, почему первое решение в вашем вопросе не сработало. Могу только предположить, что вы забыли удалить echo
. Как бы то ни было, вот еще один подход, который также должен делать то, что вам нужно, если вы используете bash
:
shopt -s globstar
for i in **/*jpg; do mv "$i" "${i//\//_}"; done
shopt -s globstar
Функция bash globstar
, которая заставляет **
рекурсивно соответствовать любому количеству каталогов или файлов. для i в ** / * jpg;
будет перебирать все файлы (или каталоги), имена которых оканчиваются на .jpg
, сохраняя каждый как $ i
. «$ {i // \ // _}»
- это имя текущего файла (или каталога), в котором все экземпляры /
заменены на _
. Если у вас также могут быть каталоги с именами, заканчивающимися на .jpg
, и вы хотите их пропустить, сделайте это вместо этого:
shopt -s globstar
for i in **/*jpg; do [ -f "$i" ] && echo mv "$i" "${i//\//_}"; done
И для всех файлов, независимо от расширения:
shopt -s globstar
for i in **/*; do [ -f "$i" ] && echo mv "$i" "${i//\//_}"; done
К какой папке .ssh вы не можете получить доступ? (Из Cygwin вы не сможете увидеть ее на Ubuntu, однако вы должны быть в состоянии увидеть ее на Ubuntu, из Ubuntu, если она находится именно там). Если вы сгенерировали RSA-ключ с помощью puttygen, он не будет работать с ssh.exe от Cygwin, потому что они используют разные форматы для файла ключа (putty использует файл с расширением .ppk, который имеет другой формат).
Вы можете загрузить этот ppk файл в puttygen, а затем использовать Преобразования -> Экспорт ключа OpenSSH
, чтобы сохранить его в правильном формате, который может использовать ssh.exe. Если вы хотите загрузить этот файл ключа в Cygwin с диска Windows, вы можете использовать каталог /cygdrive, чтобы получить доступ к диску C: (или другому диску), на котором находится ключ. Затем вы можете использовать команду -i, чтобы указать ssh на него. Другая альтернатива - использовать ssh-keygen для генерации нового ключа для Cygwin и добавить его в папку authorized_keys Ubuntu.
Также Cygwin ssh по умолчанию использует имя пользователя, с которым вы вошли в windows, в качестве имени пользователя удаленного хоста, если вы не укажете его в аргументах команды ssh.
Если это все еще не работает, я бы проверил, что делает ssh, добавив -vvv к аргументам команды.
ssh -vvvv -i /cygdrive/c/path/to/my/id_dsa -l username host.address.here
(очевидно, заменив правильные аргументы для -i -l и host.address.here
).