Как восстановить имена файлов, которые были переименованы с помощью сценария

Я только что перешел на использование Ubuntu на постоянной основе (начиная с Windows 10), и я читал, что в Linux не рекомендуется использовать пробелы в именах файлов. Итак, я нашел в сети сценарий (см. Ниже) для замены пробелов в именах файлов символами подчеркивания, и я планировал использовать его для изменения имен некоторых из моих файлов, которые я передаю из Windows, многие из которых в настоящее время имеют пробелы.

Я создал тестовую папку с несколькими файлами, чтобы убедиться, что сценарий выполняет то, что я хочу. Однако вместо того, чтобы запускать сценарий для изменения имен в моей тестовой папке, я случайно запустил его для всего моего домашнего каталога, что также изменило некоторые имена внутри моей папки .config и других каталогов, которые я не хотел переименовывать. и я планировал использовать его для изменения имен некоторых из моих файлов, которые я передаю из Windows, многие из которых в настоящее время имеют пробелы.

Я создал тестовую папку с некоторыми файлами в ней, чтобы убедиться, что сценарий что я хочу сделать. Однако вместо того, чтобы запускать сценарий для изменения имен в моей тестовой папке, я случайно запустил его для всего моего домашнего каталога, что также изменило некоторые имена внутри моей папки .config и других каталогов, которые я не хотел переименовывать. и я планировал использовать его для изменения имен некоторых из моих файлов, которые я передаю из Windows, многие из которых в настоящее время имеют пробелы.

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

!/bin/bash
find -name "* *" -print0 | sort -rz | \
  while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done

и некоторые из примеров вывода:

renamed './.config/google-chrome/Default/Managed Extension Settings' -> './.config/google-chrome/Default/Managed_Extension_Settings'
renamed './.config/google-chrome/Default/Secure Preferences' -> './.config/google-chrome/Default/Secure_Preferences'
renamed './vmware/windows_10_x64/Windows 10.vmxf' -> './vmware/windows_10_x64/Windows_10.vmxf'

Я новичок в Linux (уверен, вы можете сказать), и мне было интересно, может ли мне помочь кто-нибудь более опытный. восстановить имена файлов до тех, которые были до запуска сценария - просто отмените все изменения, сделанные сценарием. Спасибо.

1
задан 4 August 2020 в 02:54

2 ответа

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

1
ответ дан 11 August 2020 в 20:13

Гарантия на это не распространяется ...
Это должно быть выполнено в командной строке в домашнем каталоге.
Образец выходного файла также должен находиться в домашнем каталоге, чтобы упростить задачу.
Осторожно вырежьте и вставьте все это и выполните.

grep "renamed" sampleoutputfilename.txt | sed s/renamed// | awk '{FS="->";print "unrenamed" $2 " moving back to " $1;system("mv " $2 " " $1)}'

имейте в виду, что я сделал это на основе образца выходного файла, который я никогда не видел .. Итак, я сделал свой собственный, который выглядел так.

 renamed './.config/google-chrome/Default/Managed Extension Settings'
-> './.config/google-chrome/Default/Managed_Extension_Settings'
 renamed './.config/google-chrome/Default/Secure Preferences' -> './.config/google-chrome/Default/Secure_Preferences'
 renamed './vmware/windows_10_x64/Windows 10.vmxf' -> './vmware/windows_10_x64/Windows_10.vmxf'
 renamed './this1.txt' -> './that1.txt'
 renamed './Videos/this 2.txt' -> './Videos/that2.txt'
 renamed './this 3.txt' -> './that3.txt'
 renamed './.config/geany/this 4.txt' -> './.config/geany/that4.txt'
 renamed './this5.txt' -> './that5.txt'
 renamed './this 6.txt' -> './that6.txt'

.... Так что формат - это то, что я предполагал.
Вы можете сначала протестировать его, вырезав и вставив все строки этого / этого образца в файл testsampleoutput.txt ... а затем создав все «те» файлы для тестирования.

`touch './that1.txt' './Videos/that2.txt' './that3.txt' './that5.txt' './that6.txt'

у вас может не быть установлен geany так что оставьте это.

0
ответ дан 11 August 2020 в 20:13

Другие вопросы по тегам:

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