У меня есть несколько файлов в папке, которые следуют соглашению об именах:

 rs1.txt  
 rs2.txt
 rs3.txt

Некоторые из этих файлов были созданы мной, а некоторые - моим коллегой. Я надеялся изменить имя файла в зависимости от того, кому принадлежит файл. Так что если у нас есть

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

Мои файлы изменились бы на:

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

Есть ли какой-нибудь мыслимый способ сделать это?

5 ответов5

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

Он ищет файлы, принадлежащие ME и запускает команду mv для каждого из них. На этот раз вам не нужна опция + в конце (что часто предпочтительнее). Вы можете добавить ограничения в список файлов, как вам нравится: -name rs*.txt , например.

1

Вот один из способов сделать это. это переименовывает все файлы в текущем каталоге с пользователем 'ME', добавляя 's' к имени.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .