Перемещение файлов и переименование с использованием части структуры каталогов и части текущего имени файла

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

Решение состоит в том, чтобы изменить размер раздела vm.

Первый шаг заключается в том, чтобы поместить нераспределенное пространство в последний раздел, что можно сделать с помощью parted. См. https://www.gnu.org/software/parted/manual/html_node/parted_31.html

Второй шаг - увеличить файловую систему раздела, чтобы заполнить новое пространство. Как это сделать, зависит от формата раздела. Например, в случае ext4 вы можете найти инструкции по адресу https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ext4grow.html

2
01.01.2017, 23:28
2 ответа

В итоге пришлось использовать rnm . Немного некрасиво, но работает:

find /mnt/test -name '*.dav' -exec sh -c 'for filename do 
    if [[ $(basename "$filename") != C*.dav ]];then
        find "$filename" -type f -execdir ~/bin/rnm -y "$filename" -ns '/pd05/_/pd03/_/n/.dav' \;
    fi
done' find-sh {} \;

find /mnt/test -name '*.dav' -exec sh -c 'for filename do 
    rename "[M][0@0][0]" "" "$filename" 
done' find-sh {} \;

find /mnt/test -name '*.dav' -type f -execdir sh -c 'mv "$@" ./../../../../..' find-sh {} \;

PS: Да, я оба пользователи. Изначально я разместил сообщение как гость, а затем перешел по электронной почте, чтобы создать учетную запись. Удивлен, что это не было автоматическим. Извините за путаницу с обратной косой чертой, скопировал файлы на ноутбук с Windows, забыл изменить обратно для публикации.

Обновление 1: удалено зацикливание на результатах поиска

2
27.01.2020, 22:10

Улучшение ответа Полса :

Следующий код:

find /mnt/test -name '*.dav' -exec sh -c 'for filename do 
    if [[ $(basename "$filename") != C*.dav ]];then
        find "$filename" -type f -execdir ~/bin/rnm -y "$filename" -ns '/pd05/_/pd03/_/n/.dav' \;
    fi
done' find-sh {} \;

Можно оптимизировать вот так (без find или для цикла ):

rnm -y -ns '/pd5/_/pd3/_/n/.dav' -ss '^[^C].*\.dav$' -fo -dp -1 /mnt/test

Объяснение:

-ss : строка поиска (регулярное выражение). Используемое выше регулярное выражение ищет файлы, которые заканчиваются на .dav и не начинаются на C .

-fo : Режим только файлов.

-dp : Глубина. -1 означает неограниченную глубину, т.е. переход во все подкаталоги.

-ns : строка имени (новое имя)

/ pd / : правило строки имени, которое подразумевает разные уровни имен родительских каталогов: 0 - непосредственный родитель, 1 - выше это и так далее.

/ n / : Другое правило строки имени, которое подразумевает имя файла без расширения. /n/.dav можно заменить на / fn / (полное имя).

-y : подтвердить ( - да ) для всех.

0
27.01.2020, 22:10

Теги

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