Перемещение файлов и папок без удаления структуры папок исходной папки

Весь этот вопрос зависел от 2 осложнений. Первой была моя глупая ошибка, когда я думал, что у меня может быть сценарий sourceсам по себе. Возможно, это возможно в других контекстах, но в моем конкретном случае это вызвало бесконечный цикл моего вызова.zshrc. Вторая сложность возникла из-за неудачной попытки решить первую проблему :с помощью libreoffice для редактирования файла конфигурации системы. Мой вызов infinte script сделал все терминалы непригодными для использования, и без других доступных текстовых редакторов с графическим интерфейсом я подумал, что libreoffice подойдет для редактирования с изменением одной строки. Похоже, что при сохранении любого текстового файла libreoffice с этой даты будет добавлять к текстовым файлам метку порядка байтов(https://en.wikipedia.org/wiki/Byte_order_mark). Я вообще мало о них знаю,но я могу точно сказать, что редактор vim по умолчанию не будет отображать их каким-либо заметным образом без команд vim.

Вы можете удалить вышеупомянутые спецификации в vim. :set bomb?выведет bomb, если текущий файл действительно имеет спецификацию. И наоборот, nobombбудет возвращено, если их нет.

И достаточно интуитивно, вы можете удалить это с помощью vim:set nobomb

Не забудьте потом сохранить файл. В противном случае никаких изменений не произойдет.

-1
26.01.2021, 18:57
1 ответ

Используйте rsync, чтобы скопировать все, а затем удалите из источника все, кроме каталогов. Например, начиная с этого (каталог source, содержащий файл bar2, и подкаталог foo, содержащий файл source/foo/bar2):

.
$ tree source/
source/
├── bar2
└── foo
    └── bar1

1 directory, 2 files

Вы бы побежали:

rsync -r source/ dest/

Что создает:

    $ tree dest/
dest/
├── bar2
└── foo
    └── bar1

1 directory, 2 files

А теперь удалите все не -каталоги изsource:

find source/ -not -type d -delete

Или, если у вашего findнет -delete, используйте:

find source/ ! -type d -exec rm {} +

Чтобы автоматизировать это, вы должны просто написать небольшой скрипт, подобный этому:

#!/bin/sh

source="$1"
dest="$2"

rsync -r "$source"/ "$dest"/ 
find "$source"/ -not -type d -delete

Сделайте скрипт исполняемым и запустите его с исходным и целевым каталогами в качестве аргументов:

foo.sh /source /dest
1
18.03.2021, 22:34

Теги

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