Сначала создайте папки:
<try.txt xargs -d$'\n' dirname | xargs -d$'\n' mkdir -p
Затем скопируйте файлы. Сначала подготовьте поток с правильными исходными и целевыми каталогами с sed
, а затем перейдите к xargs
:
sed 's@^Changes/\(.*\)@zip2/\1\n&@' try.txt |
xargs -d$'\n' -n2 cp
Но если вы не владеете bash
, просто прочитайте поток построчно:
while IFS= read -r dest; do
dir=$(dirname "$dest")
mkdir -p "$dir"
src=$(sed 's@^Changes@zip2@' <<<"$dest")
cp "$src" "$dest"
done < try.txt
Не используйте кавычки `, они крайне обескуражены. Вместо этого используйте $(...)
для подстановки команд.
Простое выполнение xargs -a try.txt
без команды не имеет смысла, просто $(cat try.txt)
или лучше $(<try.txt)
.
Используйте параметр -t
с xargs
чтобы посмотреть, что он делает.
Явно укажите разделитель с помощью xargs -d$'\n'
- иначе xargs
будет анализировать "
'
и \
специально.
Я считаю, если вам повезет и вам удастся поработать, вы можете просто использовать rsync
с чем-то вместе rsync --include-from=try.txt changes/ zip2/
.