Поиск файлов старше определенного времени и перемещение их в определенную папку - PullRequest
0 голосов
/ 22 мая 2018

Может ли кто-нибудь помочь мне исправить скрипт для поиска файлов в определенной папке, заданной в качестве аргумента, и переместить их в другую папку?Я попытался войти в цикл while, но безуспешно, и я не понимаю, что я делаю неправильно.Я новичок в сценариях Linux и пытаюсь понять это.

StructuraFoldere=$1
shift
VechimeFis=$2
shift
Dirmutat=$3
shift
cout=1
echo

while [ $# -gt 0 ]
do
if [ -g $# ]
then -ls $#
fi
shift
echo find /"$#" -maxdepth 1 -mtime +"$VechimeFis" -type f -exec mv "{}" "$Dirmutat" \; 
shift
cout=$[cout+1]
shift
done

Ответы [ 3 ]

0 голосов

Итак, вы, вероятно, захотите использовать команду find.

my_directory=${1}
m_time = ${2}
for file in `find ${my_directory} -type f -mtime +${m_time}`; do mv -v ${file} /move/here; done

Это позволит найти только файлы в каталоге $ 1, которые старше $ 2 дней, и переместить их.(Это не проверено, но дает представление о том, что делать)

0 голосов
/ 22 мая 2018

Я собираюсь ответить на самую общую часть вашего вопроса: «Я новичок в сценариях Linux и пытаюсь понять это».Я делаю это, потому что мне кажется, что ты в самом начале;главное, что мне подсказывает, это то, что вы используете и $1, $2 и т. д. и shift.

Сравните эти два сценария:

Первый скрипт:

FIRST=$1
shift
SECOND=$2
shift
THIRD=$3
shift

echo $FIRST
echo $SECOND
echo $THIRD

Если я запускаю это с ./scriptname.sh 1 2 3, я получаю вывод:

1
3
    # a blank line

Второй скрипт:

FIRST=$1
SECOND=$2
THIRD=$3

echo $FIRST
echo $SECOND
echo $THIRD

Если я запускаю это с ./scriptname.sh 1 2 3, я получаю вывод:

1
2
3

Другими словами, shift не является необходимым и фактически мешает.Вам нужно использовать shift только тогда, когда вы делаете что-то вроде этого:

FIRST=$1
shift
SECOND=$1
shift
THIRD=$1
shift

... или, чаще, читая $1 несколько раз внутри цикла.

Вотдействительно хороший ресурс для изучения сценариев оболочки:

http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html

Это поможет вам с самого начала, и я все еще считаю его очень ценным ресурсом даже после 25+годы сценариев оболочки.

Хотя это не отвечает на ваш конкретный вопрос, я чувствую, что вам нужно более основательное основание, которое является предварительным к вашей заявленной цели.Я твердо убежден, что это поможет вам в достижении более широкой цели - изучения сценариев оболочки.Если вы внимательно прочитаете вышеприведенное Руководство для начинающих пользователей Bash, вы скоро найдете способ (или несколько способов!) Написать сценарий поиска / перемещения файлов, о котором вы конкретно спрашивали.

HTH.

0 голосов
/ 22 мая 2018

Этот однострочник может найти файлы в каталоге, переданном в качестве первого аргумента source directory, который старше, чем второй аргумент age, и переместить отфильтрованные файлы в третий аргумент destination directory

#!/bin/bash
find /"$1" -maxdepth 1 -mtime +"$2" -type f -exec mv "{}" "$3" \;    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...