Рекурсивно перемещать определенные файлы во вложенных каталогах к имени, полученному из пути

RAID-контроллеры представляют системе виртуальный диск, который выглядит как один диск для операционной системы, но фактически является массивом, состоящим из нескольких дисков. Если в операционной системе нет специальной поддержки для управления RAID-контроллером, ОС не сможет увидеть или проверить диски компонентов. Необходимо проверить RAID-массив, используя функции, предоставляемые самим RAID-контроллером.

Поскольку Вы, похоже, не доверяете RAID-контроллеру BIOS (Вы называете его «фальшивым»), Вы можете рассмотреть возможность его полного отключения, чтобы ОС могла видеть отдельные реальные диски и управлять ими. Затем можно настроить Linux программного обеспечения RAID с помощью mdadm .

-121--209642-

С помощью sudo пользователь переключается на root. Я подозреваю, что это не было предназначено, так как ssh затем будет искать ключи в/root/.ssh/и, не найдя там применимого ключа, просто попросит пароль удаленного пользователя.

Обычно я запускаю exec ssh-agent bash или т.п. - оставаясь тогда с моим собственным пользователем.

Затем я запускаю ssh-add , чтобы загрузить (большую часть) мои ключи в агент, перед запуском ssh - снова обычно без sudo .

Если я ошибаюсь и sudo был намеренным, можете ли вы сообщить нам, чего вы тем самым пытаетесь достичь?

-121--289394-

Поскольку эта проблема возникает на различных типах терминалов и возникает в командной строке, но не когда какая-либо другая программа читает с терминала, это проблема конфигурации в вашей оболочке. Вы случайно определили привязки для a и c .

Предположим, что оболочка bash (интерактивная оболочка по умолчанию на Ubuntu), проверьте два соответствующих файла конфигурации в вашем домашнем каталоге:

  • .inputrc , файл конфигурации для библиотеки readline, который используется bash. Найдите строку, начинающуюся с a , и строку, начинающуюся с c .
  • .bashrc , конфигурационный файл для bash при его работе в интерактивном режиме. Найдите строку, содержащую , связывающую... , и строку, содержащую , связывающую c... .
0
03.04.2018, 03:43
2 ответа

Ваш вопрос, как написано, предполагает, что вы хотите искать во всей файловой системе файлы Analysis.mzXML, даже если они появляются в /lib/perl5/5.14/Unicode/Collate/Locale, /proc/sys/net/ipv4/conf/all, /sys/devices/system/cpu/cpu0/cache, /usr/share/doc/cmake/html/_sources, или аналогично маловероятные / неподходящие места — и что вы хотите переместить файлы в корневой каталог, что также кажется маловероятным/ неуместным. Я предположил, что вы работаете из какого-то другого каталога.

Запустите эту команду:

find. -mindepth 7 -maxdepth 7 -type f -name Analysis.mzXML -exec sh -c 'for arg do echo mv -i -- "$arg" "$(echo "$arg" | sed -e "s|^\./||" -e "s|/dir6/Analysis\.mzXML|.mzXML|" -e "s|/|_|g")"; done' sh {} +

Вы можете не указывать -mindepth 7 -maxdepth 7если вы уверены, что все файлы Analysis.mzXMLнаходятся на седьмом уровне. Эта команда находит все файлы Analysis.mzXMLна седьмом уровне. и передает их мини-сценарию оболочки -. Это берет каждый путь, удаляет ./в начале и dir6в конце вместе с Analysisчастью имени файла, и изменяет все оставшиеся символы /на _. Это должно дать что-то вроде этого:

mv -i --./dir1/dir2/dir3/dir4/dir5/dir6/Analysis.mzXML dir1_dir2_dir3_dir4_dir5.mzXML
mv -i --./the/quick/brown/fox/jumps/dir6/Analysis.mzXML the_quick_brown_fox_jumps.mzXML
mv -i --./over/the/lazy/dog/foo bar/dir6/Analysis.mzXML over_the_lazy_dog_foo bar.mzXML

Если это выглядит правильно, запустите команду еще раз, но удалите первый echo(, т.е. замените echo mvпросто наmv).

Примечания:

  • Это не подтверждает, что каталог шестого уровня на самом деле называется dir6. Если он находит файл Analysis.mzXMLв dir11/dir12/dir13/dir14/dir15/dir16он переименует этот файл к dir11_dir12_dir13_dir14_dir15_dir16_Analysis.mzXMLа не dir11_dir12_dir13_dir14_dir15.mzXML.
  • -iзаставит mvзапросить подтверждение если он пытается переместить файл на имя, которое уже существует.
  • --должен защитить вас от аргументов, начинающихся с-. Это не должно быть проблемой, поскольку $argвсегда должно начинаться с ./.
  • Если вы действительно хотите сделать это из корня файловой системы, это должно сработать. Просто cd /и следуйте приведенным выше инструкциям.

Запоздалая мысль :Это может привести к сбою, если у вас есть каталог с именем Analysis.mzXML. Так что не делайте этого.

1
28.01.2020, 02:43

Если вы перемещаете только один файл с помощью mv, вы указываете имя исходного файла, а затем имя целевого файла ИЛИ целевой каталог, если вы хотите, чтобы он имел то же имя в другом каталоге. например.

mv /path/to/Analysis.mzXML /new/directory/new-filename.mzXML

или (сохранение того же имени файла в новом каталоге):

mv /path/to/Analysis.mzXML /new/directory/

Если вы перемещаете несколько файлов, целью ДОЛЖЕН быть каталог. например.

 mv /path/to/*.mzXML /new/directory/

То же самое верно, если вы хотите скопировать файл или файлы с помощью cp, а не mv.

1
28.01.2020, 02:43

Теги

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