Удалите файлы и каталоги их именами. Никакой такой файл или каталог

Установите отдельного ssh демона - или другая копия OpenSSH или например, Dropbear - в систему, возможно в /opt или $HOME, выполните его на другом порте. Также выполните обновление в мультиплексоре виртуального терминала (tmux, screen..) для предотвращения проблем, следующих из потери/отбрасывания соединения на полпути посредством обновления.

Используя статически связанные двоичные файлы и для дополнительного ssh демона и для мультиплексора виртуального терминала имел бы смысл также в этом случае.

33
20.02.2014, 01:14
3 ответа
Используйте [11803]-prune[11804] в каталогах, которые вы собираетесь удалить в любом случае, чтобы сказать [11805]find[11806], чтобы не беспокоиться о поиске файлов в них:

for file in *.avi; do
    # use perl to transform the file name; could use 'sed -r' too
    new_path=$(perl -pe 's|^(.+?)\.S0*(\d+)E0*(\d+)\.(.+)\.(\w+)$|$1/Season $2/Episode $3 - $4.$5|' <<< "$file")
    # create directories if needed
    mkdir -p "${new_path%/*}"
    # move the file
    mv -vn "$file" "$new_path"
done

Также обратите внимание на то, что [11807]*. поэтому[11808] необходимо процитировать, поскольку в противном случае оболочка может быть расширена до списка файлов [11809].so[11810] в текущем каталоге.

  • Эквивалентом вашего GNU [11811]-regex[11812]-типа один было бы:
  • Обратите внимание, что если вы собираетесь использовать специфический для GNU синтаксис, то вы можете также использовать [11813]-delete[11814] вместо [11815]-exec rm -rf {}. +[11816]. С помощью [11817] -delete[11818] GNU [11819] find[11820] автоматически включает [11821] -depth [11822]. Она не запускает внешние команды, так что таким образом, она более эффективна, Кроме того, это безопаснее, так как удаляет состояние гонки, при котором кто-то может заставить вас удалить неправильные файлы, изменив каталог на сим-ссылку в промежутке между тем, как [11823]find[11824] найдет файл и [11825]rm[11826] удалит его (подробности см. в [11827]info -f find -n 'Security Considerations for find'[11828]).
55
27.01.2020, 19:37
Полагаю, причина в том, что [11783] find[11784] сначала удаляет дерево каталогов и пытается проверить содержимое каталога, что, очевидно, не самый лучший возможный порядок. Можно заставить [11785]find[11786] сначала проверить содержимое:
  • Следует подумать об использовании [11787]-delete[11788] для файлов и [11789]-exec rmdir[11790] для каталогов.
  • .
  • 8
    27.01.2020, 19:37
    Мое решение.

    + vs \; в команде -exec

                                
    0
    27.01.2020, 19:37

    Теги

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