Strona 1 z 1

[+] Bash - przerzucenie plików do innego katalogu

: 20 lipca 2012, 15:20
autor: sethiel
Mam
-katalog_glowny
--katalog1
---pliki
--katalog2
---pliki
itd

Do każdego z katalogow[x] przychodzą pliki.
Chciałbym zachowywać 10 najnowszych a całą resztę przerzucać do katalog_archiwum.
Najlepiej jeszcze żeby jak się jakieś nowe katalogi pojawiają to były z automatu brane pod uwagę.

Ale pomysły mi się skończyły jak taki skrypt napisać (piątek?).

: 20 lipca 2012, 16:18
autor: kodama
A te pliki co tam przychodzą to jakoś "na bieżąco" czy jak to działa?

: 20 lipca 2012, 16:45
autor: Rafal_F
Tu jest parę skryptów: http://unix.stackexchange.com/questions ... dest-files . Jeśli pliki pojawiają się "same" co pewien czas to do uruchamiania skryptu możesz wykorzystać crona.

: 20 lipca 2012, 17:05
autor: kodama

Kod: Zaznacz cały

ls -t | head -10
w katalogu wyświetli ci 10 najnowszych plików.

: 21 lipca 2012, 08:54
autor: larry2003
Problem co prawda dosyć prosty ale domyślam się, że to jednak magia piątku. Trzymaj (nie testowałem bo nie mam za bardzo gdzie):

Kod: Zaznacz cały

#!/bin/bash

path='/ścieżka_do_katalog_glowny'
for i in `ls $path`; do
        cd `echo $path`/$i;
        latest10=`ls -t |head -10`;
        all=`ls`;

        for j in ${all
[*]}; do
                licznik=0;
                for k in ${latest10
[*]}; do
                        if [ $j == $k ]; then
                                ((licznik++));
                        fi
                done
                if [ $licznik == 0]; then
                        mv $j `echo $path``echo $i`/archiwum;
                fi
        done
done


: 23 lipca 2012, 09:28
autor: sethiel
Dziękuję.
To co było najstrasznieszniejsze to:

Kod: Zaznacz cały

for i in `ls $path`; do
Ech moja głupota trzeba było pierwsze test puścić ...

Kod: Zaznacz cały

mv /katalog/plik /katalog2
i zanim się zorientowałem pliki pożegnałem. Photorec teraz pracuje nad ich odzyskaniem.

Kod: Zaznacz cały

mv /katalog/plik /katalog2/plik
Mała różnica a jaka przerażająca.

Lekko zmodyfikowany.

Kod: Zaznacz cały

path='/sciezka1'
arch='/sciezka2/archiwum/'
for i in `ls $path`; do
        cd `echo $path`/$i;
        latest10=`ls -t |head -10`;
        all=`ls`;

        for j in ${all
[*]}; do
                licznik=0;
                for k in ${latest10
[*]}; do
                        if [ $j == $k ]; then
                                ((licznik++));
                        fi
                done
                if [ $licznik == 0 ]; then
                        if [ ! -d "$arch$i" ]; then
                            mkdir $arch$i
                        fi
                        mv $path'/'$i'/'$j $arch$i'/'$j
                fi
        done
done