Переместите файл и оставьте гибкую ссылку

Я нашел, что XVI 32 свободный удобный инструмент.

9
задан 14 May 2009 в 11:08
3 ответа

Маленькое примечание, то, что Вы могли использовать ln оба раза, чтобы заставить команду не на самом деле переместить данные (предполагающий, что оба пути находятся в той же файловой системе).

ln /some/path/file /another/path/ && ln -sf /another/path/file /some/path/

Но я предполагаю, что Вы хотите переместить содержание/some/path/к другому диску и затем создать ссылки на новые файлы, таким образом, "никто" не замечает.

for f in `ls /some/path/`; do ln /some/path/$f /another/path/ && ln -sf /another/path/$f /some/path; done

Обертывание его в функции удара:

function cpln {
    for f in `ls $1`
    do
        ln $1/$f $2 && ln -sf $2/$f $1
    done
}
7
ответ дан 2 December 2019 в 22:32

Существует мой сценарий, который Вы могли использовать (берет два параметра/some/path/file и/another/path/):

#!/bin/bash
cp $1 $2
if [ "$?" -ne "0" ]; then
    echo "Some error"
    exit 1
    fi
ln -sf $2/${1##*/} ${1%/*}
2
ответ дан 2 December 2019 в 22:32
  • 1
    Прохладный прием с обработками строк, никогда не видел это прежде.Спасибо! –  itsadok 17 May 2009 в 14:17

Серьезно, я думал, что это было действительно легким вопросом.

Вот то, что я могу сделать в жемчуге:

#!/bin/perl
# Usage: cpln TARGETDIR SOURCE...
# Example: find tree/ -type f | xargs cpln commands/

$target = shift;

foreach(@ARGV) {
    m[(.*)/([^/]+)];
    system("cp $_ $target");
    system("ln -sf $target/$2 $1/");
}

Я надеялся на что-то более изящное, но я предполагаю, что буду использовать это.

1
ответ дан 2 December 2019 в 22:32
  • 1
    Сделать это " в Perl, " необходимо использовать File::Copy (или подобный) и символьная ссылка (). Perl не является оболочкой; избегайте, чтобы система (), и особенно постаралась не передавать целые командные строки системе () (например, что, если аргумент содержит пространство?). Так или иначе, всегда, всегда, ВСЕГДА возвращаемые значения проверки. –  John Siracusa 14 May 2009 в 17:53

Теги

Похожие вопросы