Использование sed в выражении "while read" - PullRequest
0 голосов
/ 08 августа 2011

Я довольно застрял в этом сценарии.

#!/bin/bash

STARTDIR=$1
MNTDIR=/tmp/test/mnt

find $STARTDIR -type l  |
    while read file;
    do
       echo Found symlink file: $file
       DIR=`sed 's|/\w*$||'`
       MKDIR=${MNTDIR}${DIR}
       mkdir -p $MKDIR
       cp -L $file $MKDIR
    done

Я передал некоторый каталог параметру $ 1, в этом каталоге есть три символические ссылки. В операторе while показывалось только первое совпадение, после использования sed я проиграл все остальные совпадения. Посмотрите на вывод ниже:

[artyom@LBOX tmp]$ ls -lh /tmp/imp/
total 16K
lrwxrwxrwx 1 artyom adm   19 Aug  8 10:33 ok1 -> /tmp/imp/sym3/file1
lrwxrwxrwx 1 artyom adm   19 Aug  8 09:19 ok2 -> /tmp/imp/sym2/file2
lrwxrwxrwx 1 artyom adm   19 Aug  8 10:32 ok3 -> /tmp/imp/sym3/file3

[artyom@LBOX tmp]$ ./copy.sh /tmp/imp/
Found symlink file: /tmp/imp/ok1
[artyom@LBOX tmp]$ 

Может кто-нибудь помочь с этим вопросом? Спасибо

1 Ответ

1 голос
/ 08 августа 2011

Вы забыли накормить что-нибудь для седа.Без явного ввода ничего не читается в этой конструкции.В любом случае я бы не использовал этот подход, а просто использовал бы что-то вроде:

DIR=`dirname "$file"`
...