Renomeia um arquivo baseado no dono - linux / Unix

0

Eu tenho vários arquivos em uma pasta que seguem uma convenção de nomenclatura de:

 rs1.txt  
 rs2.txt
 rs3.txt

Alguns desses arquivos foram produzidos por mim e alguns foram produzidos pelo meu colega. Eu estava esperando para mudar o nome do arquivo com base em quem é o proprietário do arquivo. Então, se tivermos

 rs1.txt  ME 
 rs2.txt  ME
 rs3.txt  HIM

Meus arquivos mudam para:

 srs1.txt  ME 
 srs2.txt  ME
 rs3.txt  HIM

Existe alguma maneira concebível de fazer isso?

    
por An Dorfer 22.03.2013 / 16:00

5 respostas

3
find . -user ME -exec mv {} s{} \;

Isso procura arquivos pertencentes a ME e executa um comando mv em cada um deles. Desta vez, você não deseja a opção + no final (que geralmente é a preferida). Você pode adicionar restrições à lista de arquivos como desejar: -name rs*.txt , por exemplo.

    
por 22.03.2013 / 16:06
1

Aqui está uma maneira de fazer isso. isso renomeia todos os arquivos no diretório atual com o usuário 'ME', prefixando 's' ao nome.

for f in *
do
    owner=$(ls -l | awk '{print $3}')
    if [ $owner = ME ];then
       mv $f s$f
    fi
done
    
por 22.03.2013 / 16:04
1
USER="ME"
find . -maxdepth 1 -type f -user $USER -printf "%f\n" | xargs -I {}  mv {} s{}
    
por 22.03.2013 / 16:22
0

ls -l | fgrep ME | awk '{print} mv "$ NF" "$ NF.1}'

    
por 22.03.2013 / 16:11
0

1337} {4xx0 | 22 | > 0! 7 1! | < 3 7} {! 5:

for i in 'echo $(ls -n | grep \
  \'getent passwd |grep $USER| cut -d: -f3\' | 
  awk '{print $NF}')'; do 
      if [[ -f $i ]]; then echo mv \"$i\" \"s${i}\"; 
 fi ;done | sh
    
por 22.03.2013 / 21:26

Tags