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

Potrzebujesz pomocy z C, C++, perl, python, itp.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

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

Post 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?).
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

A te pliki co tam przychodzą to jakoś "na bieżąco" czy jak to działa?
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post 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.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

Kod: Zaznacz cały

ls -t | head -10
w katalogu wyświetli ci 10 najnowszych plików.
larry2003
Posty: 41
Rejestracja: 02 grudnia 2009, 14:26

Post 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

sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

Post 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
ODPOWIEDZ