Весь этот вопрос зависел от 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
Не забудьте потом сохранить файл. В противном случае никаких изменений не произойдет.
Используйте 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