Lista argumentów zbyt długi błąd dla poleceń rm, cp, mv

Mam kilkaset plików PDF pod katalogiem w Unixie. Nazwy plików PDF są naprawdę długie (ok. 60 znaków).

Kiedy próbuję usunąć wszystkie pliki PDF używając następującego polecenia:

rm -f *.pdf

Dostaję następujący błąd:

/bin/rm: cannot execute [Argument list too long]

Jakie jest rozwiązanie tego błędu? Czy ten błąd występuje również dla poleceń mv i cp? Jeśli tak, jak rozwiązać te polecenia?

Author: codeforester, 2012-07-02

28 answers

Powodem tego jest to, że bash rozszerza gwiazdkę na każdy pasujący plik, tworząc bardzo długą linię poleceń.

Spróbuj tego:

find . -name "*.pdf" -print0 | xargs -0 rm

Warning: jest to wyszukiwanie rekurencyjne i znajdzie (i usunie) pliki również w podkatalogach. Przypnij -f do polecenia rm tylko wtedy, gdy jesteś pewien, że nie chcesz potwierdzenia.

Możesz wykonać następujące czynności, aby polecenie nie było rekurencyjne:

find . -maxdepth 1 -name "*.pdf" -print0 | xargs -0 rm

Inną opcją jest użycie find -delete "flaga": {]}

find . -name "*.pdf" -delete
 950
Author: DPlusV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 16:34:26

Tl;dr

Jest to ograniczenie jądra co do rozmiaru argumentu wiersza poleceń. Zamiast tego użyj pętli for.

Pochodzenie problemu

Jest to problem systemowy, związany ze stałą execve i ARG_MAX. Istnieje wiele dokumentacji na ten temat (zobacz man execve, wiki Debiana).

Zasadniczo, rozszerzenie wytwarza polecenie (Z jego parametrami), które przekracza ARG_MAX limit. W jądrze 2.6.23 limit został ustalony na 128 kB. To stała została zwiększona i można uzyskać jej wartość wykonując:

getconf ARG_MAX
# 2097152 # on 3.5.0-40-generic

Rozwiązanie: Użycie for Pętli

Użyj pętli for zgodnie z zaleceniami na BashFAQ / 095 i nie ma limitu poza RAM / pamięcią:

Dry run to Esther it will delete what you expect:

for f in *.pdf; do echo rm "$f"; done

I wykonaj:

for f in *.pdf; do rm "$f"; done

Jest to również przenośne podejście, ponieważ glob mają silne i konsekwentne zachowanie wśród powłok (część specyfikacji POSIX ).

Uwaga: jak zauważono w kilku komentarzach, jest to rzeczywiście wolniejsze, ale łatwiejsze do utrzymania, ponieważ może dostosować bardziej złożone scenariusze, np. gdzie chcemy wykonać więcej niż jedną akcję.

Rozwiązanie: Użycie find

Jeśli nalegasz, możesz użyć find, ale naprawdę nie używaj xargs, ponieważ "jest niebezpieczny (zepsuty, exploitable, itp.) podczas odczytu nie-nul-delimited input":

find . -maxdepth 1 -name '*.pdf' -delete 

Użycie -maxdepth 1 ... -delete zamiast -exec rm {} + pozwala find aby po prostu wykonać wymagane wywołania systemowe samodzielnie bez użycia zewnętrznego procesu, a więc szybciej(dzięki @chepner comment ).

Referencje

 435
Author: Édouard Lopez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-07 16:08:15

find mA -delete działanie:

find . -maxdepth 1 -name '*.pdf' -delete
 186
Author: ThiefMaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 22:30:13

Inną odpowiedzią jest zmuszenie xargs do przetwarzania poleceń w partiach. Na przykład delete Pliki 100 na raz, cd do katalogu i uruchom to:

echo *.pdf | xargs -n 100 rm

 23
Author: portforwardpodcast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-10 06:44:15

Lub możesz spróbować:

find . -name '*.pdf' -exec rm -f {} \;
 14
Author: Jon Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 07:47:58

Jeśli próbujesz usunąć bardzo dużą liczbę plików w jednym czasie (usunąłem katalog z 485 000 + dzisiaj), prawdopodobnie napotkasz ten błąd:

/bin/rm: Argument list too long.

Problem polega na tym, że Gdy wpiszesz coś w stylu rm -rf *, * zostanie zastąpiona listą wszystkich pasujących plików, np. "rm-rf file1 file2 file3 file4" i tak dalej. Istnieje stosunkowo mały bufor pamięci przeznaczony do przechowywania tej listy argumentów i jeśli zostanie ona wypełniona, powłoka nie uruchomi program.

Aby obejść ten problem, Wiele osób użyje polecenia find, aby znaleźć każdy plik i przekazać je jeden po drugim do polecenia " rm " w następujący sposób:

find . -type f -exec rm -v {} \;

Mój problem polega na tym, że musiałem usunąć 500 000 plików i trwało to zbyt długo.

Natknąłem się na znacznie szybszy sposób usuwania plików – polecenie "Znajdź" ma wbudowaną flagę "-delete"! Oto czego użyłem:

find . -type f -delete

Za pomocą tej metody usuwałem pliki w tempie ok. 2000 plików / sekundę-dużo szybciej!

Możesz także wyświetlać nazwy plików podczas ich usuwania:

find . -type f -print -delete

... lub nawet pokazać, ile plików zostanie usuniętych, a następnie ile czasu zajmuje ich usunięcie:

root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real    0m3.660s
user    0m0.036s
sys     0m0.552s
 13
Author: Bibin Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-22 17:38:20

Możesz spróbować tego:

for f in *.pdf
do
  rm "$f"
done

Edytuj: Komentarz thiefmastera sugeruje, żebym nie ujawniał tak niebezpiecznej praktyki jedisowi Younga shella, więc dodam bardziej "bezpieczniejszą" wersję (ze względu na zachowanie rzeczy, gdy ktoś ma " - rf . ..plik pdf")

echo "# Whooooo" > /tmp/dummy.sh
for f in '*.pdf'
do
   echo "rm -i \"$f\""
done >> /tmp/dummy.sh

Po uruchomieniu powyższego, po prostu otwórz plik /tmp/dummy.sh w ulubionym edytorze i sprawdź każdą linię pod kątem niebezpiecznych nazw plików, komentując je, jeśli zostaną znalezione.

Następnie skopiuj skrypt dummy.sh do działającego katalogu i uruchom to.

To wszystko ze względów bezpieczeństwa.
 12
Author: BigMike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-06 06:18:27

Możesz użyć tablicy bash:

files=(*.pdf)
for((I=0;I<${#files[@]};I+=1000)); do
    rm -f "${files[@]:I:1000}"
done

W ten sposób usunie w partiach po 1000 plików na krok.

 8
Author: danjperron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-14 14:45:50

Możesz użyć tego polecenia

find -name "*.pdf"  -delete
 6
Author: Sarath Ak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-08 06:45:31

Polecenie rm ma ograniczenie plików, które można usunąć jednocześnie.

Jedna z możliwości, którą możesz usunąć za pomocą wielokrotnego polecenia rm bazuje na wzorcach plików, takich jak:

rm -f A*.pdf
rm -f B*.pdf
rm -f C*.pdf
...
rm -f *.pdf

Można je również usunąć za pomocą find komendy:

find . -name "*.pdf" -exec rm {} \;
 5
Author: Fabio Farath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-15 22:49:27

Miałem ten sam problem podczas kopiowania katalogu źródłowego formularza do miejsca docelowego

Katalog źródłowy miał Pliki ~3 lakcs

Użyłem cp z opcją-r i u mnie działa

Cp-r abc / def /

Skopiuje wszystkie pliki z abc do def bez ostrzeżenia o zbyt długiej liście argumentów

 3
Author: user3405020,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 07:40:35

Jeśli są to nazwy plików ze spacjami lub znakami specjalnymi, użyj:

find -maxdepth 1 -name '*.pdf' -exec rm "{}" \;

To zdanie przeszukuje wszystkie pliki w bieżącym katalogu (- maxdepth 1) z rozszerzeniem pdf (-name '*.pdf'), a następnie usuń każdy z nich (- exec rm" {}").

Wyrażenie {} zastępuje nazwę pliku, a "{} " ustawia nazwę pliku jako ciąg znaków ze spacjami lub znakami specjalnymi.

 3
Author: Alejandro Salamanca Mazuelo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 14:07:08

Dziwi mnie, że nie ma tu odpowiedzi. Za każdym razem, gdy mam ten problem, kończę TUTAJ lub TUTAJ. Rozumiem, że to rozwiązanie ma ograniczenia, ale ulimit -s 65536 wydaje się często robić sztuczkę dla mnie.

 3
Author: dps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 04:41:59

Spróbuj tego również jeśli chcesz usunąć Pliki/Foldery powyżej 30/90 dni (+) lub poniżej 30/90 dni ( -), możesz użyć poniższych poleceń ex

Ex: dla 90days wyklucza powyżej po 90days pliki/foldery usuwa, to znaczy 91,92....100 dni

find <path> -type f -mtime +90 -exec rm -rf {} \;

Ex: tylko dla najnowszych plików 30days, które chcesz usunąć, użyj poniższego polecenia ( - )

find <path> -type f -mtime -30 -exec rm -rf {} \;

If you wanna giz the files for more than 2 days files

find <path> -type f -mtime +2 -exec gzip {} \;

Jeśli chcesz zobaczyć pliki / foldery tylko z poprzedniego miesiąc . Ex:

find <path> -type f -mtime -30 -exec ls -lrt {} \;

Powyżej 30 dni więcej tylko wtedy lista plików / folderów Ex:

find <path> -type f -mtime +30 -exec ls -lrt {} \;

find /opt/app/logs -type f -mtime +30 -exec ls -lrt {} \;
 2
Author: raja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 10:19:46

I jeszcze jedno:

cd  /path/to/pdf
printf "%s\0" *.[Pp][Dd][Ff] | xargs -0 rm

printf to muszla zbudowana i z tego co wiem, zawsze taka była. Teraz, biorąc pod uwagę, że printf nie jest komendą powłoki (ale wbudowanym), to nie jest przedmiotem błędu krytycznego " argument list too long ...".

Więc możemy bezpiecznie używać go z szablonami globbingującymi powłoki, takimi jak *.[Pp][Dd][Ff], Następnie przekierowujemy jego wyjście, aby usunąć polecenie (rm), przez xargs, co upewnia się, że pasuje do wystarczającej liczby nazw plików w linii poleceń, aby nie zawieść polecenia rm, które jest powłoką dowództwo.

\0 in printf służy jako separator null dla nazw plików, które są następnie przetwarzane przez xargs, używając go (-0) jako separatora, więc rm nie zawodzi, gdy w nazwach plików znajdują się białe spacje lub inne znaki specjalne.

 2
Author: lind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 02:42:24

Miałem ten sam problem z folderem pełnym tymczasowych obrazów, który rosł z dnia na dzień i to polecenie pomogło mi wyczyścić folder

find . -name "*.png" -mtime +50 -exec rm {} \;

Różnica w stosunku do innych poleceń to parametr mtime, który zajmie tylko pliki starsze niż X dni (w przykładzie 50 dni)

Używając tego wielokrotnie, zmniejszając przy każdym wykonaniu zakres dnia, byłem w stanie usunąć wszystkie niepotrzebne pliki

 1
Author: Brugolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 11:35:47

Wiem tylko jak to obejść. Chodzi o to, aby wyeksportować tę listę plików pdf, które masz do pliku. Następnie podziel ten plik na kilka części. Następnie usuń pliki pdf wymienione w każdej części.

ls | grep .pdf > list.txt
wc -l list.txt

Wc-l służy do policzenia, ile linijek ma Lista.txt zawiera. Kiedy masz pojęcie, jak długo to jest, możesz zdecydować się podzielić go na pół, forth lub coś w tym stylu. Użycie polecenia split-l Na przykład podziel go na 600 linii.

split -l 600 list.txt

Spowoduje to utworzenie kilku plików o nazwie xaa, xab,xac i tak dalej zależy jak się podzielisz. Teraz, aby "zaimportować" każdą listę w tym pliku do polecenia rm, użyj tego:

rm $(<xaa)
rm $(<xab)
rm $(<xac)
Przepraszam za zły angielski.
 0
Author: thai_phan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-29 09:30:07

Wpadłem na ten problem kilka razy. Wiele rozwiązań uruchomi polecenie rm dla każdego pliku, który ma zostać usunięty. Jest to bardzo nieefektywne:

find . -name "*.pdf" -print0 | xargs -0 rm -rf

Skończyłem pisząc skrypt Pythona, aby usunąć pliki na podstawie pierwszych 4 znaków w nazwie pliku:

import os
filedir = '/tmp/' #The directory you wish to run rm on 
filelist = (os.listdir(filedir)) #gets listing of all files in the specified dir
newlist = [] #Makes a blank list named newlist
for i in filelist: 
    if str((i)[:4]) not in newlist: #This makes sure that the elements are unique for newlist
        newlist.append((i)[:4]) #This takes only the first 4 charcters of the folder/filename and appends it to newlist
for i in newlist:
    if 'tmp' in i:  #If statment to look for tmp in the filename/dirname
        print ('Running command rm -rf '+str(filedir)+str(i)+'* : File Count: '+str(len(os.listdir(filedir)))) #Prints the command to be run and a total file count
        os.system('rm -rf '+str(filedir)+str(i)+'*') #Actual shell command
print ('DONE')
To działało bardzo dobrze dla mnie. Udało mi się usunąć ponad 2 miliony plików tymczasowych w folderze w około 15 minut. Skomentowałem tar z odrobiny kodu więc każdy z minimalnym żadna wiedza Pythona nie może manipulować tym kodem.
 0
Author: Pedro Montero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-05 16:11:25

Możesz utworzyć folder tymczasowy, przenieść wszystkie pliki i podfoldery, które chcesz zachować w folderze tymczasowym, a następnie usunąć stary folder I zmienić nazwę folderu tymczasowego na stary.]}

mkdir testit
cd testit
mkdir big_folder tmp_folder
touch big_folder/file1.pdf
touch big_folder/file2.pdf
mv big_folder/file1,pdf tmp_folder/
rm -r big_folder
mv tmp_folder big_folder

rm -r big_folder usunie wszystkie pliki w big_folder bez względu na to, ile. Po prostu trzeba być bardzo ostrożnym, najpierw masz wszystkie pliki / foldery, które chcesz zachować, w tym przypadku było to file1.pdf

 0
Author: Keithhn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 04:59:03

Aby usunąć wszystkie *.pdf w katalogu /path/to/dir_with_pdf_files/

mkdir empty_dir        # Create temp empty dir

rsync -avh --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/

Usuwanie określonych plików za pomocą rsync za pomocą wieloznacznych znaków jest prawdopodobnie najszybszym rozwiązaniem w przypadku, gdy masz miliony plików. I zajmie się błędami, które dostajesz.


(opcjonalny krok): bieg na sucho. Aby sprawdzić, co zostanie usunięte bez usuwania. `

rsync -avhn --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/

. . .

Kliknij porady i wskazówki rsync Aby uzyskać więcej hacków rsync

 0
Author: Raman Kathpalia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-22 17:39:11

Stwierdziłem, że dla bardzo dużych list plików (>1E6) odpowiedzi te były zbyt wolne. Oto rozwiązanie wykorzystujące przetwarzanie równoległe w Pythonie. Wiem, Wiem, to nie jest linux... ale nic więcej tu nie działało.

(to zaoszczędziło mi godziny)

# delete files
import os as os
import glob
import multiprocessing as mp

directory = r'your/directory'
os.chdir(directory)


files_names = [i for i in glob.glob('*.{}'.format('pdf'))]

# report errors from pool

def callback_error(result):
    print('error', result)

# delete file using system command
def delete_files(file_name):
     os.system('rm -rf ' + file_name)

pool = mp.Pool(12)  
# or use pool = mp.Pool(mp.cpu_count())


if __name__ == '__main__':
    for file_name in files_names:
        print(file_name)
        pool.apply_async(delete_files,[file_name], error_callback=callback_error)
 0
Author: mmann1123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-18 10:30:33

Miałem do czynienia z podobnym problemem, gdy istniały miliony bezużytecznych plików dziennika utworzonych przez aplikację, która wypełniała wszystkie i-węzły. Uciekłem się do "zlokalizuj", wszystkie pliki"zlokalizowane" d do pliku tekstowego, a następnie usuwałem je jeden po drugim. Trochę to trwało, ale się udało!

 0
Author: asatsi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 05:39:31

A może krótszy i bardziej niezawodny?

for i in **/*.pdf; do rm "$i"; done
 0
Author: Farshid Ashouri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-23 22:05:19

Zbyt długa lista argumentów

Jako tytuł pytania dla cp, mv i rm, ale odpowiedź oznacza głównie rm.

Polecenia Un*x

Przeczytaj uważnie stronę man polecenia!

Dla cp i mv, Istnieje -t przełącznik, dla cel :

find . -type f -name '*.pdf' -exec cp -ait "/path to target" {} +

I

find . -type f -name '*.pdf' -exec mv -t "/path to target" {} +

Script way

W skrypcie bash znajduje się ogólny workaroung:

#!/bin/bash

folder=( "/path to folder" "/path to anther folder" )

[ "$1" = "--run" ] && exec find "${target[@]}" -type f -name '*.pdf' -exec $0 {} +

for file ;do
    printf "Doing something with '%s'.\n" "$file"
done
 0
Author: F. Hauri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-30 12:02:21

Nieco bezpieczniejsza wersja niż używanie xargs, również nie rekurencyjna: ls -p | grep -v '/$' | grep '\.pdf$' | while read file; do rm "$file"; done

Filtrowanie naszych katalogów tutaj jest trochę niepotrzebne, ponieważ 'rm' i tak go nie usunie, i można go usunąć dla uproszczenia, ale po co uruchamiać coś, co na pewno zwróci błąd?

 -2
Author: Kaplan Ilya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 09:29:15

Używanie GNU parallel (sudo apt install parallel) jest bardzo proste

Uruchamia polecenia wielowątkowe, gdzie "{} " jest argumentem przekazanym

Np.

ls /tmp/myfiles* | parallel 'rm {}'

 -2
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 21:54:36

Do usunięcia pierwszych 100 Plików:

Rm-rf 'LS | head -100'

 -2
Author: Nikunj Ranpura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 10:20:58

Poniższa opcja wydaje się prosta dla tego problemu. Dostałem to info z jakiegoś innego wątku, ale mi pomogło.

for file in /usr/op/data/Software/temp/application/openpages-storage/*; do
    cp "$file" /opt/sw/op-storage/
done

Po prostu uruchom powyższe polecenie, a ono wykona zadanie.

 -5
Author: Amittal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-31 23:55:12