Очевидно, val
, полученное в результате копирования в первый раз, является сломанной символической ссылкой.
ls
перечисляет val
, потому что он существует: есть запись каталога с именем val
.cd val
жалуется «Нет такого файла или каталога», потому что val
является неработающей символической ссылкой. cd
должен получить доступ к цели ссылки, но цель не существует (это определение неработающей символической ссылки).du val
показывает 0, потому что символическая ссылка не использует место для хранения. (Пробел для имени и метаданных не учитывается.)os.path.exists
возвращает False
для неработающих символических ссылок.rmdir val
справедливо жалуется, что val
не является каталогом, так как это символическая ссылка.rm val
обычно удаляет val
, поскольку val
— это файл, который не является каталогом.Вы сообщаете:
lrwxrwxrwx 1 user1 dinfk 4 20 июня 12:05 source_folder -> test
Команда cp -r
копирует символическую ссылку как символическую ссылку. Поскольку исходная_папка
является символической ссылкой, целью которой является test
, это приводит к тому, что level1/val
является символической ссылкой, целью которой является test
. Целью символической ссылки является простая строка, она ничего не «отслеживает». Символические ссылки, которые не начинаются с /
, являются относительными. level1/val
— это символическая ссылка, целью которой является test
, поэтому она указывает на level1/test
. Поскольку level1/test
не существует, символическая ссылка не работает.
Позже вы видели:
drwxr-sr-x 2 системы user2 4096 27 августа 19:02 level1/val
На этот раз вы сделали что-то другое и скопировали дерево каталогов.
Чтобы скопировать цель ссылки, а не саму ссылку, вы можете использовать
cp -r source_folder/ level1/val
Косая черта в конце указывает команде cp
действовать с каталогом, на который указывает ссылка, а не с символическим ссылка сама. Если аргумент является каталогом, это не имеет никакого значения.
вы можете протестировать полное решение sed
sed -i '/:82 /s/status=D//' file
, где
/: 82 /
выберите строку с 82 s / status = D /
замените статус на //
ничего такого. Основываясь на ваших данных примера, это должно работать
awk '/:82 /{print $1,$2; next} {print}' inputfile
Вы можете перенаправить вывод этого в другой файл.
awk '/:82 /{print $1,$2; next} {print}' inputfile >> newfile
Обычно я не люблю вносить изменения в исходные данные, если это может помочь.
на основе заданного ввод
awk '$2~/:82$/{$NF=""}1' input.txt > output.txt