Intereting Posts
Как получить `pdftotext` для вывода текста в читаемом кодировании? Проблема со всей функцией в скрипте Какие зеркала Debian 5 и 6 работают? Можно ли использовать несколько ветвей одной и той же библиотеки для создания нескольких программных модулей, для которых требуется разная версия этой библиотеки? proftpd через mysql и веб-управление пользователями FTP Отключить клавиатуру и мышь временно Как установить последний сома в ubuntu 10.04 Разрешить скрипт домена Используя LDAP для аутентификации, как я могу безопасно отключить / деактивировать учетную запись, не удаляя ее? Скорость чтения из смонтированного каталога Менеджер блокировки кластера без TCP / IP Серьезные проблемы с поиском в Radare2 Настройка правильных драйверов видеокарты: Radeon R7 M260 / M265 Удаленная командная строка syslog Клиент Обновить заголовок таблицы относительно имени файла

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

Это не будет похоже на это, но я потратил более 3 часов, пытаясь выяснить это … Я пытаюсь определить файлы во всех подкаталогах родительского каталога с определенными атрибутами (имя и размер), а затем переименовать файлы в их имя подкаталога и скопировать их в родительский каталог. Моя самая близкая попытка (я думаю) была:

find /data/data2/parent/ -size 25166176c -name "o*.nii" -exec cp {} $subdir/o*.nii $subdir.nii \; 

Для этого я получаю две строки: «cp: target» /data/data2/parent/3145_V2.nii «не является каталогом». Я проверил, чтобы убедиться, что есть только один файл, который соответствует обоим атрибутам, и он существует. Также следует отметить, что в «parent /» есть два подкаталога с соответствующим файлом, который должен быть выбран командой find, но он напечатал только ошибку, касающуюся одного из двух, «parent / 3145_v2» (и, похоже, игнорировал другой подкаталог). ).

У меня есть правило, которому я хотел бы следовать – если я потрачу более 30 минут на создание одной команды в bash, я переключусь на python 3.

Эта проблема может быть легко решена в Python:

 #/usr/local/bin/python3 import os, re DIR_TO_SEARCH = os.getcwd() #change this to what you want for (dirpath, dirnames, filenames) in os.walk(DIR_TO_SEARCH): if dirpath == DIR_TO_SEARCH: # you said you just want subdirectories, so skip this continue else: for name in filenames: full_path = dirpath + '/' + name #check for the attributes you're looking for. Change this to your needs. if re.search(r'o*\.nii', name) or os.path.getsize(full_path) > 0: #rename the file to its directory's name, and move it to the parent dir print('Moving {} to {}'.format(full_path, dirpath + '.nii')) os.rename(full_path, dirpath + '.nii') 

В целом, Python может быть менее плагинным, чем инструменты bash, но имеет то преимущество, что он хорошо документирован и довольно свободен от ошибок. Просто мои два цента.

Не стесняйтесь использовать скрипт выше, я протестировал его, и он отлично работает. Ура 🙂