Удалить все файлы с расширением linux

Обновлено: 03.07.2024

Если я установлю текущий / рабочий каталог (перейдя к нему с помощью cd ) в какой-то конкретный каталог, а затем введите:

Что будет делать эта команда? Правда ли, что приведенная выше команда удалит только файлы с расширением .xvg только в рабочем каталоге?

Я нервничал, пытаясь это сделать, прежде чем спрашивать, потому что я хочу быть абсолютно уверен, что приведенная выше команда удалит только .xvg файлы, расположенные в рабочем каталоге .

Да, rm *.xvg будут удаляться только файлы с указанным расширением в вашем текущем каталоге.

Хороший способ убедиться , что вы действительно в директории , которую вы хотите удалить файлы, чтобы использовать pwd команду , которая будет отображать текущую директорию , а затем выполнить команду , ls чтобы подтвердить , что вы нашли файлы , которые вы ожидали.

Если вы немного опасаетесь ввода rm команды, вы можете сделать 2 вещи:

введите, ls *.xvg чтобы увидеть список файлов, которые будут затронуты этой командой.

Если у вас не много файлов, вы всегда можете также использовать -i переключатель командной строки для rm (также существует для cp и mv ). Использование rm -i *.xvg предложит вам для каждого отдельного файла, если это нормально, чтобы удалить его, так что вы можете быть уверены, что ничего, что вы не ожидали, было удалено. (Это будет утомительно, если у вас много файлов, хотя :)

Также: rm -f удалить также скрытые файлы. И rm -R -f убрать также каталоги.

Вам не нужно переходить в каталог, просто используйте

В случае, если у вас есть опечатка или похожая ошибка в пути, где / som / dir не существует:

случайно удалит все .xvg-файлы в текущем каталоге. Первая команда не будет, и вам не нужно снова возвращаться.

Альтернативным способом было бы использовать find:

find / some / dir / -maxdepth 1 -type f -name "* .xvg" -delete работал для меня! используйте -maxdepth "n", чтобы удалить соответствующие файлы в подкаталоге, если указан путь

Да, rm *.xvg удаляются только файлы, оканчивающиеся .xvg на текущий каталог. Вот почему

Когда вы набираете команду, подобную этой, работа распределяется между используемой оболочкой (предположим, bash) и двоичным файлом команды.

Вы можете найти двоичный файл, набрав which rm . Эта маленькая программа заботится о том, чтобы не связывать файлы. Такие программы могут быть запущены из командной строки и могут читать список аргументов prog arg1 arg2 arg3 при запуске. В случае rm , они интерпретируются как список полностью определенных имен файлов, которые будут удалены. Так что, если вы находитесь в каталоге, содержащем файл foo.bar , ввод delete 'foo.*' приведет к rm: foo.*: No such file or directory . Обратите внимание на одинарные кавычки вокруг шаблона файла, они говорят оболочке передавать аргумент в оболочку как она есть.

Однако, если вы введете rm *.bar в тот же каталог, файл будет удален. Здесь происходит то, что ваша оболочка, то есть программа, которую вы используете для ввода команд, выполняет некоторые преобразования перед передачей аргументов в команду. Один из них называется «расширение имени файла», иначе известный как «глобализация». Вы можете увидеть список расширений имени bash-файла здесь . Одним из наиболее распространенных расширений является * расширение имен файлов в текущем каталоге.

Простой способ взглянуть на глобусы в работе - использовать echo , который возвращает все аргументы, переданные ему через оболочку. Таким образом, ввод echo * в том же каталоге будет выводить foo.bar . Поэтому, когда вы печатаете rm *.bar , на самом деле происходит то, что оболочка расширяет список аргументов foo.bar , а затем передает это rm команде.

Есть несколько способов контроля за сгущением. Например, в последних версиях bash вы можете включить опцию globstar, которая будет выполнять рекурсивное расширение. При наборе echo **/*.bar будет показан список всех файлов, заканчивающихся .bar во всех подпапках. Поэтому ввод rm **/*.bar в globstar с включенным bash действительно рекурсивно удалит все соответствующие файлы в подпапках.

Что нужно: удаление файлов с определённым расширением из директории /home.

В /home может быть множество различных папок.

Файлов с разными расширениями может быть много.


BitSum ★★ ( 13.09.17 23:13:41 )
Последнее исправление: BitSum 13.09.17 23:13:48 (всего исправлений: 1)


куча вариантов 1) на питоне напиши, расширения в кортеж, потом с помощью endswith() проверяешь файлы 2) на баше напиши 3) тупо возьми find

find ./ -type f \( -iname \*.txt -o -iname \*.iso \)

find -iregex '.*\.\(txt\|html\|iso\)$'


-exec позволяет выполнить команду, подставив найденное имя. '<>' — найденное имя, экранированная точка с запятой — конец блока -exec.

Добавил решения в первый пост.

Как создать переменную для указания расширений? Иначе получится колхоз.


у линуксового find есть сразу опция -delete


-exec универсальный :) А вникать в этот ман нужно очень долго.

Файлов с разными расширениями может быть много.

Забудь про расширения. Это вендузячий подход. В линуксах просто имя файла. Если точка в начале, то некоторые утилиты считают его скрытым.

А раз имя файла, то к нему можно применять регулярки. Например rm *bak

тип регулярки можно задать через -regextype, список типов получить запустив 'find -regextype help', но само их описание погребено в недрах info.


Как создать переменную для указания расширений?

bash таки умеет массивы.


Если позанудствовать, то ТСа можно понять так, что каталоги с именами типа a.txt/ удалять наверное не надо. :)

Если позанудствовать . каталоги с именами типа a.txt/ удалять наверное не надо

. -type f .
Так видно лучше? Никто и не собирался ^)


А, точно, спать надо больше :( Как же так. Наверное прокоментировать хотел пример выше, а взял последнее.

vodz ★★★★★ ( 14.09.17 07:44:45 )
Последнее исправление: vodz 14.09.17 07:47:22 (всего исправлений: 1)

А что, rm -r *.*ext* не катит уже?

1) нерекурсивный
2) на большом количестве файлов тянет на переполнение комстроки

Такой вариант ещё предложили, ну очень удобный.


Такой вариант ещё предложили, ну очень удобный.

Может выдать типа:

vodz ★★★★★ ( 14.09.17 09:12:28 )
Последнее исправление: vodz 14.09.17 09:13:52 (всего исправлений: 3)


колхоз, но с утра голова лучше не придумала)


Заодно пометь тему решенной


колхоз, но с утра голова лучше не придумала)

эм, давно не баше не писал, пардноньте, а то, что я поставил точку перед расширением не поможет?

. прогнал у себя по хомяку, нет ни одного ошибочного совпадения.


что я поставил точку перед расширением не поможет?

Нет, потому что маска развернется ещё в for i in *?[xyz]* <-- вот тут.

хм, спасибо, буду знать.

Так в итоге, какое конечное решение будет на баше? Чтобы я протестировал и обновил первый пост.

BitSum ★★ ( 14.09.17 11:54:08 )
Последнее исправление: BitSum 14.09.17 11:54:22 (всего исправлений: 1)


vodz ★★★★★ ( 14.09.17 11:59:48 )
Последнее исправление: vodz 14.09.17 12:02:48 (всего исправлений: 3)

С переменными и, особенно, массивами в bash лучше не связывайся, с ними всегда больше ошибок и тормозов, типичный пример тут Удалить файлы с определённым расширением. Как? (комментарий)


С переменными и, особенно, массивами в bash лучше не связывайся

Я осилил. И понял, что, во-первых, оно того не стоит и почти везде лучше итерацию по пассиву заменять на пайпы, xargs и т.п. и во-вторых, новичок точно напорется на грабли с файликами с пробелами, начинающимися на минус, с длиной командной строки и т.п.


во-первых, оно того не стоит и почти везде лучше

И этот поц говорит о тормозах и пробелах в именах.

Обновил первый пост. Добавил скрипт на баше.

Пожалуй его и буду использовать. Наиболее компактный вариант для меня, с учётом того, что выражений десятки.

BitSum ★★ ( 14.09.17 12:56:01 )
Последнее исправление: BitSum 14.09.17 12:57:50 (всего исправлений: 2)

Чтобы не выглядеть так как и вы голословным,

Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений - это может быть и 10 и 20 раз. Многократное замедление прохода по диску - это не голые слова, а суровая реальность. А через год ТС захочет решить те-же задачу тем-же способом, но забудет кавычки или поставит не те и будет удивляться, почему простой скрипт глючит.


Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений - это может быть и 10 и 20 раз.

Это вроде бы правильно, но в скриптах важно не задумыватся о работе внутри дерева интерпретатора, а их удобность. Так вот, поиск и правка хардкорного regex-а внутри скрипта у вас займёт кучу времени по сравнению со сколько комп затратит на цикл.

Хотя. если действительно считать миллисекунды, то да, надо формировать аргументы (-a -name ".$ext")* для ровно одного вызова find. Можно было б вам защитать 1:1, но вызов несколько find-ов это на много затратнее чем дерево bash-а и потому объяснение правильно лишь случайно :))) А скрипт становится развесистым и трудным для понимания.

но забудет кавычки или поставит не те и будет удивляться

vodz ★★★★★ ( 14.09.17 14:14:26 )
Последнее исправление: vodz 14.09.17 14:16:48 (всего исправлений: 2)


А я понял, вы не о внутренностях интерпретатора. Проход по файловой системе действительно долог. Разве что надеяться, что система обычно тут не очень тупит и в кеш попадает всё на первом проходе, так как файлы сами не читаются и память уходит только на сами каталоги. Признаю, думал о людях обычно глубже и сразу бросился отвечать. Но даже первый абзац остаётся в силе насчёт неудобств харкоженного и неудобного regex.

Проход по файловой системе действительно долог

Да ещё как. Если это зрелая файлопомойка на терабайт, то огого как долго можно по ней блуждать. А если оно по сети смонтировано, то всё ещё хуже. А если поиск идёт не по имени, а, например, по дате, то это вызов stat() на каждый файл.

Хотя на моём хомяке кеширование здорово помогает и разница не настолько велика, как я ожидал.

Трудночитаемость регэкспов признаю и вообще хотел бы, чтобы у find была опция -names-from-file (так-же, как grep --file=). скостылить для финда чтение паттернов из файла можно, но выглядит это ужасно.

Linux

Изучение

Каждый файл имеет определенное расширение. Если мы хотим удалить файлы с одинаковыми или разными расширениями из нашей системы Linux, мы должны выполнять множество различных типов команд. В этой статье мы увидим, как удалить все файлы с расширением командной строки Linux.

Удалить все файлы с расширением командной строки Linux

В этом разделе будут объяснены различные способы и методы удаления всех файлов с расширениями с помощью командной строки в Linux.

Использование команды rm

В соответствующей команде «имя_файла1», «имя_файла2» и т.д. Обращайтесь к именам плюс их полные пути. Когда файлы находятся в одном каталоге, нам не нужно записывать полный путь, но мы должны указать полный путь, если это не так.

Мы можем использовать выражения с подстановочными знаками, чтобы указать инкрементные файлы с одинаковыми именами или файлы с определенными расширениями файлов. Итак, давайте рассмотрим пример, в котором мы удалим файлы DATA.txt, DATA1.txt и DATA2.txt. Эти файлы доступны в каталоге Documents, поэтому сначала мы откроем их в терминале с помощью следующей команды:

После этого выполните следующую команду

Теперь давайте проверим, что система успешно удалила файлы, поэтому выполните следующую команду/

Использование подстроки для удаления файлов

С помощью следующей команды мы можем удалить те файлы, которые содержат подстроку test.

Здесь «*» обозначает любую строку. Поэтому здесь «* test *» учитываются все файлы, имена которых имеют подстроку «test».

Мы можем легко удалить файлы с определенными расширениями из любой папки. В этом примере мы удалим файлы с расширением gif. Мы можем удалить все файлы GIF из папки, используя следующую команду.

Приведенный выше синтаксис работает только для файлов. Наряду с файлами мы также можем удалять папки с помощью аргумента ’-r’:

Главное отметить, что он удаляет папку в целом рекурсивно, то есть все файлы, подпапки и т.д. Этой папки во всей структуре папок. Это означает, что нет способа рекурсивно удалять файлы с определенными расширениями или файлы с шаблонами имен файлов.

Найти команду

Найти — самая эффективная и популярная команда для поиска файлов. Команда find используется для удаления расширений файлов в Linux. Команда find выполняет рекурсивный поиск файлов по размеру, расширению, имени и параметрам файла. Используя команду find, мы можем передать его вывод по конвейеру в ’rm’.

Резервное копирование и проверка файлов

Также используются различные команды, чтобы проверить, какие файлы мы удаляем, и их расположение правильное. Однако этот шаг необязателен, если необходимо убедиться.

Проверить местоположение

Мы должны убедиться, что расположение нашего файла правильное. Для этого мы используем следующую команду.

Резервные файлы

Для резервного копирования мы используем команду tar. Если мы не на 100% уверены, что у нас есть нужные файлы для удаления или нет, мы должны сделать резервную копию.

Мы можем добавить опцию -v, чтобы увидеть список файлов, резервные копии которых выполняет команда tar.

Удалить файлы с помощью find — удалить

Если мы не решаемся использовать rm, мы можем использовать find отдельно от этого. Его следует использовать с осторожностью. Это примерно так.

Прежде всего, мы убеждаемся, какой файл нам нужно удалить. Для этого мы используем следующую команду.

Мы должны позаботиться о том, чтобы -delete был последним аргументом в нашей команде. Если по ошибке мы поместим его перед аргументом -name *.bak, он удалит все.

Удалите файлы с помощью find и xargs

Он не поддерживает опцию «-delete». Мы можем передать его в ’rm’ следующим образом с выводом, который появляется перед нами при поиске.

Здесь мы передаем аргумент в rm с помощью команды xargs. Мы можем рекурсивно удалить всю структуру папок с помощью этого метода.

Удаляет файлы с помощью find-exec

Мы используем rm с различными командами (такими как корзина) или дополнительными параметрами для удаления файлов.

Использование find с -exec дает нам преимущество использования любых параметров и команд для удаления файлов. В то же время он также позволяет нам выполнять другие массовые операции с набором файлов.

Заключение

В этой статье мы научились удалять любой файл из папок или папок с любым конкретным расширением с помощью различных команд. Мы надеемся, что из этой статьи, объясненной нами, вы получите полную информацию в одном месте и, должно быть, очень хорошо ее поняли.

Удаляем файлы и каталоги по заданным критериям или маске. Есть несколько вариантов удаления. Прицеп прост, собрать структуру файлов или директорий и удалить.

Для сбора данных как всегда используем команду find, но многие не смотрели ее дополнительных возможностей. Есть ключ -delete с помощь которого можно сразу и удалить выбранные объекты.

Удаляем все пустые каталоги по маске

А если каталог или директория заполнена прибегаем к команде rm .

Как найти все каталоги по маске и удалить их содержимое в Linux

Вариант 1. Фильтр find -name

Находим каталоги по маске

Находим каталоги по маске и удаляем каталоги и файлы рекурсивно

Вариант 2. Фильтр grep

Находим каталоги по маске

Находим каталоги по маске и удаляем каталоги и файлы рекурсивно


Автор первичной редакции:
Алексей Максимов
Время публикации: 05.06.2018 16:09

Удаление файлов с помощью rm

Для того чтобы удалить файл в Linux через терминал необходимо использовать команду « rm » (от английского «remove»). Данная команда удаляет все указанные ей файлы, но по умолчанию не удаляет каталоги. Чтобы позволить команде « rm » удалять каталоги нужно добавить опцию « -r » или « -R ». Более подробно об этом во второй половине статьи.

Также нужно отметить, что команда « rm » не выполняет физическое удаление данных, вместо этого указанные файлы просто удаляются из файловой системы, а занимаемое ими место маркируется как свободное. Это означает, что после удаления данные остаются на диске и пока они не будут перезаписаны другими данными, их можно будет восстановить с помощью специальных программ. Для физического удаления данных с перезаписью диска следует использовать команду « shred ».

В общем случае для удаления файла в Linux через терминал достаточно просто ввести в терминал « rm » и указать имя документа. Например, для того чтобы удалить « file1.txt » из текущего каталога нужно выполнить вот такую команду:

удаление файла

Если удаляемый файл находится не в текущем каталоге, то в терминале нужно указать полный путь. Например, это может выглядеть вот так:

удаление файла полный путь

При необходимости, с помощью команды « rm » можно удалить сразу несколько файлов. Для этого просто введите « rm » и перечислите имена через пробел, например:

rm file1 file2 file3

удаление нескольких файлов

Для удаления большого количества похожих файлов можно использовать маски. Например, чтобы удалить все документы с расширением txt нужно выполнить вот такую команду:

удаление файлов по маске

Также маску можно использовать для удаления вообще всех файлов. Например, чтобы удалить все файлы в текущей папке нужно выполнить:

удаление всех файлов по маске

Аналогичным способом можно удалить все файлы в определенной папке:

удаление файлов в папке по маске

Главное, соблюдать осторожность, так как при использовании масок можно удалить что-то лишнее.

Команды для удаления большого количества файлов в Linux

Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:

Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).

При удалении таким образом очень большого количества файлов из определенного каталога может выдавать ошибки — причина в том, что система на самом деле не видит маски и разворачивает передаваемое ей выражение — срабатывает ограничение на количество аргументов, и выполнение команды прекращается.

Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.

Синтаксис в простейшем случае может выглядеть так:

for f in /var/log/apache2/*.log; do rm «$f»; done

В цикл for можно добавить любую дополнительную логику.

Удаление старых файлов в Linux по Cron

Логи или другие файлы (сессии РНР) можно удалять как используя циклы (так приходится делать обычно если логов или других файлов накопилось действительно очень много), но если система не запущена или только создается лучше использовать регулярно выполняемое задание Cron, согласно которому с заданной периодичностью будут удаляться файлы определенных типов

В примере удаляются сессии РНР для сайта старше 7 дней.

linux-delete-old-files.jpg

В цикле то же самое можно сделать так:

for f in /tmp/logs/*.log

Приведенное выражение, как и любой другой цикл можно поместить в файл, сделать его исполняемым и с тем же успехом выполнять по Cron

Linux: Как найти и удалить файлы по шаблону одной командой

Это можно сделать несколькими методами, но самый простой — с использованием флага «-delete», который есть у команды «find».

Пример использования:
Допустим нам нужно удалить все «*.jpg» файлы в текущей папке, и во всех подпапках.
Тогда команда удаления будет выглядеть следующим образом:

Удобно сначала просто найти/выбрать все файлы для удаления, выполнив эту команду без флага «-delete», чтобы быть уверенным, что мы будем удалять именно те файлы, которые нужно, а затем выполнить эту же команду, добавив к конце «-delete».

Удаление файлов в Linux

Чтобы удалить файл linux достаточно передать в параметрах команде адрес файла в файловой системе:

Чтобы удалить все файлы, начинающиеся на слово file можно использовать специальный символ *, означает любой символ в любом количестве:

Эта команда удаления файла в linux должна использоваться очень осторожно, чтобы не удалить ничего лишнего. В утилиты есть опция -i, которая заставляет программу спрашивать пользователя перед тем, как удалить файл linux:

rm: удалить пустой обычный файл «/home/user/file»?

rm -f /home/user/file*

Для удаления директорий, вместе с файлами и поддиректориями используется опция -R, например:

rm -Rf /home/user/dir

Будет удалено все что находиться в папке dir, и эта папка. Только будьте бдительны, чтобы не получился знаменитый патч Брамина:

Не стоит выполнять эту команду в своей системе, как видите, она удаляет все файлы в файловой системе Linux.

Удаление файла в linux также возможно с помощью утилиты find. Общий синтаксис find:

find папка критерий действие

Например, мы хотим удалить файл linux по имени:

Будут найдены все файлы с именем file в текущей папке и для них вызвана команда rm -f. Можно не вызывать стороннюю утилиту, а использовать действие delete:

Удалить все файлы в текущей директории, соответствующие определенному регулярному выражению:

Или удалить файлы старше определенного строка, может быть полезно для удаления старых логов:

find /path/to/files* -mtime +5 -exec rm <> ;

Будет выполнено удаление файлов через терминал все файлы в папке старше 5-ти дней.

Linux удаление файлов по маске

подскажите как с помощью rm удалить все файлы с расширением *.txt ?
заранее спасибо.

Ответить | Правка | Cообщить модератору

  • Удалить файлы по маске *.txt, chainik, 11:49 , 13-Мрт-09, (1)
  • Удалить файлы по маске *.txt, djaarf, 14:28 , 13-Мрт-09, (2)
  • Удалить файлы по маске *.txt, Veon, 16:52 , 13-Мрт-09, (3)
    • Удалить файлы по маске *.txt, djaarf, 21:19 , 13-Мрт-09, (5)

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    Откуда удалить? Со всех хостов инета?

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    Чудесная утилита find тебе поможет.

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    find /home/vasya -name “*.txt” | xargs rm

    В зависимости от контретной ситуации

    >>доброго дня,
    >>
    >>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >>
    >>заранее спасибо.
    >
    >find /home/vasya -name “*.txt” | xargs rm

    Можно обойтись одним find
    find path -type f -name “*.txt” -delete
    >
    >rm *.txt, rm -r *.txt
    >
    >В зависимости от контретной ситуации

    Удаление каталога с файлами

    Удаляем конкретный каталоги с файлами.

    rm -dfR ./test/dir1

    Удаляем каталог с файлами по маске

    Приятного использования и удаления.

    Поиск и удаление файлов с помощью find

    Также нужно отметить, что существуют и альтернативные способы удаления файлов. Например, вы можете использовать команду поиска « find ». Команда « find » будет полезна в тех случаях, когда вам нужно удалить определенные файлы в целом ряде папок.

    Например, для того чтобы найти и удалить все txt-файлы в текущей и во всех вложенных папках можно выполнить вот такую команду:

    удаление файлов с помощью поиска

    Чтобы узнать больше об использовании « find » введите в терминал команду « man find ».

    Удаление файлов по маске с фтп

    Есть доступ к фтп-директории на чтение, запись, удаление.
    В крон запихиваю скрипт, который будет забирать оттуда файлы по маске, и по той же маске их удалять, дабы каждый раз не забирать одно и тоже.

    Что Я Делаю Не Так?

    116322:-1692569248.jpg

    tuxlor.jpg

    О, теперь на ЛОРе можно говорить «руки из Zhopin »

    tuxlor.jpg

    У тебя руки из Zhopin

    116322:-1692569248.jpg

    если руки золотые, не важно откуда они растут

    Ты всё перепутал, это не золото. Это просто говно такого цвета.

    116322:-1692569248.jpg

    кроме анонимного ослоумия, посты будут? Полезные посты я имею ввиду

    101460:-1897149992.jpg

    Страшная поделка. IMHO удалять можно только то, что скачали.

    На перле или другом языке это более просто и надежно.

    Чем не устроил обычный ftp клиент ? Нафига этот pftp ?

    дебаг у pftp есть. Включить да посмотреть. Может нужно отключить интеракив в явном виде? pftp -i . ?

    105962:959150243.jpg

    tuxlor.jpg

    У тебя руки из Zhopin

    [quoteЧто Я Делаю Не Так?

    tuxlor.jpg

    У тебя руки из Zhopin

    tuxlor.jpg

    У тебя руки из Zhopin

    116322:-1692569248.jpg

    я и удаляю то что скачиваю.
    ftp -p = pftp – всё это обычный фтп клиент
    страшная поделка взятая из 99,99% примеров использования фтп клиента в баш, использовал материал которым располагал, не более.
    Что бы сделать это на перле наверно нужно знать перл, не?

    116322:-1692569248.jpg

    спасибо за пример, решением стало sleep в 200 миллисекунд между скачиванием и удалением.
    И теперь я знаю как более красиво использовать код в баше, ещё раз моя благодарность.

    101460:-1897149992.jpg

    Если ты знаешь bash, то понять не сложно.

    105962:959150243.jpg

    Вот ещё подобная тема недавно поднималась.

    Ну и да – вариант с задержкой я для проверки привёл. Ты не можешь быть уверен, что она всегда сработает. Раз сервер игнорит команды он будет делать это и дальше.

    В смысле ты подобрал задержку исходя из скорости передачи определённого объёма данных.

    Это случайные величины. Нельзя так делать. Нужно более надёжное решение.

    116322:-1692569248.jpg

    проблема в том что я не знаю баш, а только только учу его. Кинусь на другое, хорошего ничего не выйдет. Но я учту ваш совет на будущее, спасибо.

    tuxlor.jpg

    ziemin , это я понимаю, просто эта вся шняга была чисто в образовательных целях. +владелец фтп-сервера говорил что при скачивании файла, удалении (т.е. при определённых действиях), запускается некий скрипт (причём при помощи какого то модуля для фтп сервера – modexec вроде бы), который что то там делает. Что происходит по ту сторону, загадка, но возможно, этому и требуется 200 мс, так как с этой задержкой удачно скачивались, а затем удалялись, десятки файлов больших объёмов.

    111506:869939704.jpg

    В крон запихиваю скрипт, который будет забирать оттуда файлы по маске, и по той же маске их удалять, дабы каждый раз не забирать одно и тоже.

    не знаешь и не желаешь знать про OpenSSH и rsync

    116322:-1692569248.jpg

    поподробней пожалуйста, я неофит и не не очевидна мне ваша мысль
    первое тулзы для соединения и передачи файлов по ssh
    второе синхронизация двух папок на двух юникс машинах
    как мне это поможет при работе с фтп?

    111506:869939704.jpg

    FTP протокол сам по себе очень старый, и его лучше не использовать. Лучше используйте ssh, он намного более надёжный, удобный, и безопасный.

    rsync решит ваши проблемы одной командой без всяких нелепых костылей и задержек. И даже более того: она умеет качать только то, что действительно необходимо скачать, а не всё подряд. Естественно она НЕ работает по FTP.

    Поинтересуйтесь у администратора сервера, возможно ssh там уже есть(в 146% это так).

    116322:-1692569248.jpg

    действительно, погуглив, ssh практически полноценная замена ftp.
    Просто опять же человеческий фактор, просить администратора что то поменять просто так на его хорошо работающем сервере – сложная задача.
    Поэтому и скачу из имеющихся возможностей

    111506:869939704.jpg

    Просто опять же человеческий фактор, просить администратора что то поменять просто так на его хорошо работающем сервере – сложная задача.

    обычная практика: держать SSH для себя, и FTP для клиентов. Потому что 95% клиентов FTP достаточно. Ну потому доступ по SSH по умолчанию либо закрыт, либо открыт, но о нём вам не рассказали. Просто надо пообщаться с администратором, обычно SSH доступ дают без проблем.

    ssh практически полноценная замена ftp.

    нет. Ssh это намного больше, чем «заменитель ftp». И беглое гугленье вам не поможет, там Over9000 возможностей, потому вы скорее вссего наткнулись не совсем на то, что вам нужно. Наверное на sftp. Это конечно годно, но это только один из вариантов.

    для вашего случая ИМХО оптимально rsync over ssh, если конечно на сервере есть rsync(если нет, то rsync тоже можно, но sftp в этом случае не хуже).

    116322:-1692569248.jpg

    понял, просто для админа сервера я «немного продвинутый клиент», поэтому ssh мне точно не светит. Но спасибо, уже копаю в этом направлении, ваш пост оказался мегаполезен.

    111506:869939704.jpg

    для админа сервера я «немного продвинутый клиент»

    учитывая, что 95% клиентов _полные_ _идиоты_, а оставшиеся 5% — суперхакеры с ЧСВ Over9000, то такой клиент как вы — просто счастье ☺

    Читайте также: