Вы уверены, что это /data//links/a 1
в сообщении об ошибке? Я ожидаю /links//data/a 1
...
Бланки не проблема. Посмотри, что тебе echo
дал. Ваш $file
уже содержит /data/
строку. Кусок кода
"/data/$" "/links/$"
добавляет /data/
или /links/
к строке, где /data/
уже есть.
Самое простое решение - сделать так, чтобы оно $file
вообще не содержало /data/
:
cd /data for file in *; do # the rest of your script # in general remember you're in a different dir now
В качестве альтернативы вы можете оставить for file in /data/*;
и удалить лишнюю часть позже:
for file in /data/*; do file=$(basename "$file") # the rest of your script
Приведенное выше решение порождает несколько процессов, потому что basename
это отдельный исполняемый файл. По этой причине вы можете захотеть, чтобы работа выполнялась самой оболочкой:
for file in /data/*; do file="$" # the rest of your script
Синтаксис $
печатает, $file
но удаляет самую длинную строку, совпадающую */
с лицевой стороной. Эффект дает вам все, что есть после последнего /
.