Файловые данные потеряны после rsync-копирования

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

for file in /var/backup/*; do 
    fname=${file##*/}; 
    fname=${fname/.*/}; 
    cp -v "$file" /path/"$fname"*/; 
done

Результат:

$ ls /path/*
/path/adbs_32:
adbs.spec

/path/dmsx_ty_32:
dmsx.spec

/path/fomru_ts_td-45:
fomru32.spec

/path/gend_monitor:
gend.spec
2
31.05.2019, 00:27
1 ответ

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

Вот пример того, как воспроизвести ситуацию:

$ cd /tmp
$ mkdir dirperms
$ cd dirperms
$ touch foo bar baz
$ mkdir zot
$ cd..
$ chmod a-x dirperms
$ cd dirperms
bash: cd: dirperms: Permission denied
$ ls -l dirperms
ls: cannot access 'dirperms/baz': Permission denied
ls: cannot access 'dirperms/bar': Permission denied
ls: cannot access 'dirperms/foo': Permission denied
ls: cannot access 'dirperms/zot': Permission denied
total 0
-????????? ? ? ? ?            ? bar
-????????? ? ? ? ?            ? baz
-????????? ? ? ? ?            ? foo
d????????? ? ? ? ?            ? zot/

Таким образом, использование testdisk, вероятно, было излишним; вы могли бы просто исправить права доступа к каталогу Screenshotsс помощью chmod -R u+X Screenshots.

Основная причина ошибочных разрешений может заключаться в том, что исходная файловая система, возможно, была файловой системой, которая не поддерживала разрешения в стиле Unix -, поэтому разрешения, сообщаемые драйвером файловой системы (для совместимости с POSIX )не соответствует реальности того, к чему драйвер фактически разрешил rsyncдоступ. Поэтому rsyncреплицировал поддельные разрешения в целевую файловую систему, где они фактически использовались как настоящие настройки разрешений, что и вызвало проблему.

5
27.01.2020, 21:55

Теги

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