Eu tenho um arquivo com caracteres gregos ou cirílicos.
Não é de minha propriedade, mas pelo usuário do servidor web (www).
Eu não posso usar o shell como o usuário do servidor web (www) ou como root, mas eu usei um script (executado pelo usuário do servidor web) para definir o diretório modbits para o 777 e o próprio arquivo para 666.
Não consigo renomear (ou excluir isso). Mesmo usando o inode e usando find
falha:
$ ls -i1
19120017 Idezbox - коробка.jpeg
$ find . -inum 19120017 -exec mv -i {} sane \;
mv: cannot move './Idezbox - коробка.jpeg' to 'sane': No such file or directory
Caracteres curingas falham:
$ mv Idezbox*.jpeg sane
mv: cannot move 'Idezbox - коробка.jpeg' to 'sane': No such file or directory
O seguinte script Perl também falha:
find . -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/x/g) {
print("Renaming $_ to $new\n");
rename($_, $new);
}'
Imprime:
Renaming Idezbox - коробка.jpeg to Idezbox - xxxxxxxxxxxxxx.jpeg
mas o comando renomear subseqüente não tem efeito.
No entanto, observe que há 7 caracteres gregos e 14 "x" -es.
Movendo-se para o diretório acima e tentando excluir "Junk":
$ rm -riv Junk
rm: descend into directory 'Junk'? yes
rm: cannot remove 'Junk/Idezbox - коробка.jpeg': No such file or directory
Alguma saída solicitada:
$ mount | grep "on /ifi/asgard/k00"
asgard:/ifi/asgard/k00 on /ifi/asgard/k00 type nfs (rw,tcp,rsize=32768,wsize=32768,hard,intr,addr=xxx.xxx.xxx.xxx)
$ df .
Filesystem 1K-blocks Used Available Use% Mounted on
asgard:/ifi/asgard/k00
104857600 53201568 51656032 51% /ifi/asgard/k00
$ ls -al
total 88
drwxrwxrwx 2 www ifiweb 4096 2014-08-11 14:16 .
drwxrwsrwx 14 inf5270 inf5270 4096 2014-08-11 14:15 ..
-rw-rw-rw- 1 www ifiweb 35176 2012-04-14 13:38 Idezbox - коробка.jpeg
-rwxrw-r-- 1 gisle ifi-a 139 2014-08-11 14:15 perl-rename.sh
$ who ami i
gisle pts/122 2014-08-11 11:37 (safir.ifi.uio.no:13.0)
Depois de ter lido todos os comentários e respostas (obrigado a todos!) Eu não acho mais que isso seja apenas sobre escapar ou citar os personagens cirílicos. Eu preciso olhar para o ângulo NFS.
Editar 2015-10-02:
O problema acabou sendo relacionado ao NFS. Como o arquivo foi criado diretamente em um volume montado pelo NFS, que eu acessei de outro computador, nada funcionou. Logar diretamente no servidor como root permitiu que um sysadmin (eu sou um mero usuário neste sistema específico e não pode fazer isso) para excluir o arquivo (usando algum método padrão para escapar dos caracteres gregos). Parabéns ao G-Man por me colocar no caminho certo (em um comentário). Se G-Man ainda estiver por perto e converter seu comentário em uma resposta, eu irei aceitá-lo.