@val18

Как написать скрипт по переносу файлов в linux с условием?

Как написать скрипт с условием: если в 1 папке больше 1000 файлов, то перенести то в папке 1 оставляем 1000 файлов, а остальные переносим в папку 2?
Пока только знаю эти две команды по переносу файлов.
cd /home/user/export/bin
mv * /mnt/receipt/bin
  • Вопрос задан
  • 694 просмотра
Пригласить эксперта
Ответы на вопрос 4
Теперь вам нужно узнать про команды, выводящие список файлов в столбик ls -1 и команду, считающую число строк wc -l, в процессе могут пригодиться head или tail для ограничения числа выводимых строк с путями файлов и xargs для передачи параметров в mv

P.S. вероятно, лучше использовать вместо ls -1 команду вида find . -type f с ключём -exec
Ответ написан
Комментировать
@pfg21
ex-турист
читай описание
ls - листинг файлов директории
wc - подсчет строк в файле
т.е. скрипт будет типа такого
if  [$(ls /path/to/dir | wc -l ) > 10**]
    then
        mv ......
fi

т.к. ls выдает кроме листинга файлов дополнительные строчки число будет больше 1000
Ответ написан
Комментировать
@Hanharr
Если в директории нет файлов, названия которых начинаются с точки, то навскидку так будут перемещаться самые старые файлы оставляя в директории 1000 последних:

#!/usr/bin/env bash

DIR1="/path/to/dir1"
DIR2="/path/to/dir2"

i=0

for f in $DIR1; do
    [[ -f $f ]] || continue
    _=$(( i++ ))
done

if $i -gt 1000; then
    count=$($i - 1000)
    files=$(find "$DIR1" -maxdepth 1 -type f -exec stat -c "%Y %n" {} \; | sort -rn | tail -n -"$count" | awk '{print $2}')
fi

for file in $files; do
    mv "$file" $DIR2
done
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
declare -i CNT=0
for FILE in dir1/*; do
  if [[ $CNT -gt 1000 ]]; then mv $FILE dir2; fi
  CNT+=1
done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект