Переименовывает несколько файлов в каталогах в Sub каталогов на имена их каталогов

Это связано с переключением VSFTPD в пассивный режим.

Следуйте этим инструкциям.

1. открыть файл

vim /etc/vsftpd/vsftpd.conf

и написать

pasv_min_port=49152
pasv_max_port=65534

Сохранить и закрыть

2. откройте файл

     vim  /etc/sysconfig/iptables-config  

и напишите

IPTABLES_MODULES="ip_conntrack_ftp"

Сохранить и закрыть.

  1. Перезапустить службу vsftpd

      перезапустить службу vsftpd 
     
0
18.11.2018, 09:01
2 ответа

Из описания вашего вопроса я предполагаю, чтовсего нет. файлов в папке не превышает 999.

Это простой bash-скрипт, запускаемый в верхнем каталоге, т.е. модели:

#!/bin/bash
for i in./*
do
if [ -d "$i" ]
then
j=001
for k in "$i"/*
do
mv "$k" "$i"/"$i""$j".jpg
j=${j#0}
if [ ${j:0:1} -eq 0 ]
then 
j=${j#0}
fi
(( j++ ))
j=`printf '%03i' $j`
done
fi
done

Сначала он проверит каждый файл в моделях, является ли он каталогом или нет, if [ -d "$i" ]. Затем для каждого файла в этом каталоге он изменит свои имена на mv "$k" "$i"/"$i""$j".jpg. И

j=${j#0}
if [ ${j:0:1} -eq 0 ]
then 
j=${j#0}
fi

Приведенный выше код удалит все нули с самого начала, чтобы вы не получили ошибку типа:

 ((: 008: value too great for base (error token is "008")
 printf: 008: invalid octal number

И

j=`printf '%03i' $j`

сделает значение jдлиной 3 цифры.

0
28.01.2020, 04:09

Попробуйте также эту упрощенную версию Debian _предложение yadav:

for i in *
  do    if [ -d "$i" ] && cd "$i"
          then  j=0
                for k in *
                  do    ((j++))
                        echo mv "$k" $(printf "%s%03d.jpg" $i $j )
                  done
                cd..
          fi
  done

echoпредназначен только для отладки; удалите, если довольны тем, что видите.

Он cdобращается к каждому доступному каталогу, сбрасывает счетчик, перебирает все целевые файлы, увеличивает счетчик для каждого и выполняет переименование.

0
28.01.2020, 04:09

Теги

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