Удалить все папки внутри папки, кроме одной с определенным именем

  1. Сделайте использование быстрого сжатия.

    • Каким бы ни был ваш носитель передачи - особенно для сети или USB - вы будете работать с пакетами данных для чтения, кеширования и записи, и они не будут точно синхронизироваться.
    • Помимо микропрограмм диска, дисковых кешей и кешей ядра / оперативной памяти, если вы можете каким-либо образом использовать системные процессоры для концентрации объема данных, которыми обмениваются за пакет , тогда вам следует сделайте так .
    • Любой алгоритм сжатия будет автоматически обрабатывать разреженные серии входных данных настолько быстро, насколько это возможно, но очень немногие из них будут обрабатывать остальное при пропускной способности сети.
    • lz4 - лучший вариант здесь:

      LZ4 - очень быстрый алгоритм сжатия без потерь, обеспечивающий скорость сжатия 400 МБ / с на ядро, масштабируемый с помощью нескольких ядер CPU. Он также оснащен чрезвычайно быстрым декодером со скоростью в несколько ГБ / с на ядро, что обычно достигает пределов скорости ОЗУ в многоядерных системах.

  2. Предпочтительно не искать без надобности.

    • Это может быть трудно оценить.
    • Если на устройстве, с которого вы копируете, много свободного места, и устройство не было недавно обнулено, но все исходные файловые системы должны быть скопированы, то это, вероятно, того стоит. сначала сделать что-то вроде:

        dev / zero tee> empty empty1 empty2; синхронизация; rm empty * 
       
    • Но это зависит от того, на каком уровне вы должны читать исходный текст. Обычно желательно читать устройство от начала до конца из его файла устройства / dev / some_disk , потому что чтение на уровне файловой системы обычно включает поиск взад и вперед и вокруг диск непоследовательно. Итак, ваша команда чтения должна быть примерно такой:

        dev / source_device lz4 | ... 
       
    • Однако, если ваша исходная файловая система не должна передаваться целиком, тогда чтение на уровне файловой системы довольно неизбежно, и поэтому вам следует объединить входное содержимое в поток. pax обычно является лучшим и самым простым решением в этом случае, но вы также можете рассмотреть mksquashfs .

       pax -r / source / tree [12] | lz4 | ... 
      mksquashfs / source / tree [12] / dev / fd / 1 -comp lz4 | ... 
       
  3. Не не шифровать с помощью ssh .

    • Добавление служебных данных шифрования к надежному носителю не является необходимым и может серьезно сказаться на скорости устойчивых передач, поскольку для считывания данных требуется прочитать дважды .
    • PRNG нуждается в считанных данных или, по крайней мере, в некоторых из них, чтобы поддерживать случайность.
    • И, конечно, вам также необходимо передать данные.
    • Вам также необходимо передать накладные расходы на шифрование - что означает больше работы при меньшем количестве передаваемых данных за пакет .
    • Поэтому лучше использовать netcat ( или, как я предпочитаю, более способный ncat проекта nmap ) для простой сетевой копии. , как было предложено в другом месте:

       ### на машине tgt ... 
      nc -l 9999> out.lz4 
       ### затем на машине src ... {{1 }} ... lz4 | nc tgt.local 9999 
       
17
06.02.2018, 22:59
2 ответа

Протестировано с помощью приведенной ниже команды, все работает нормально

find  /home/myfolder -maxdepth 1 -type d ! -iname test2 -exec rm -rvf {} \;
0
27.01.2020, 19:46

Если требуется только первый уровень (не более глубины 1 ), как указано в вопросе, вот еще один простой вариант:

ls myfolder/ | grep -v "test2" | xargs rm -r

Детали:

  • ls myfolder/список всех папок и файлов в каталоге myfolder/
  • grep -v "test2"соответствует всему, кроме "test2"
  • xargs rm -rнаправляет вывод предыдущей команды в команду rm -r.
0
14.07.2020, 18:10

Теги

Похожие вопросы