Самый короткий способ подкачать два файла в ударе

ОБНОВЛЕНИЕ: Закрытия являются действительно ответом. Таким образом, после игры с ним еще немного, я выяснил, почему закрытия были первоначально проблематичны и как зафиксировать его. Хитрая вещь с закрытием - Вы, должны быть осторожными при итерации через элементы для не окончания со всеми закрытиями, ссылающимися на тот же элемент. Например, это не работает:

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var button = document.createElement("button");
    button.addEventListener("click", function(ev) {
        // do something with element here
    }, false)
}

, Но это делает:

var buildListener = function(element) {
    return function(ev) {
        // do something with event here
    };
};

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var button = document.createElement("button");
    button.addEventListener("click", buildListener(element), false)
}

Так или иначе, я решил не выбрать один ответ, потому что вопрос имел два ответа: 1) Нет, нет никаких внутренних идентификаторов, которые можно использовать; 2) необходимо использовать закрытия для этого. Так я просто upvoted первые люди, которые скажут, были ли внутренние идентификаторы или кто рекомендовал генерировать идентификаторы плюс кто-либо, кто упомянул закрытия. Спасибо за справку!

56
задан flybywire 12 July 2009 в 12:01
поделиться

7 ответов

Добавьте это в свой .bashrc:

function swap()         
{
    local TMPFILE=tmp.$$
    mv "$1" $TMPFILE
    mv "$2" "$1"
    mv $TMPFILE "$2"
}

Если вы хотите обработать потенциальный отказ промежуточного mv , проверьте Can Bal, answer .

Обратите внимание, что ни этот, ни другие ответы не предоставляют атомарного решения, потому что это ' Невозможно реализовать это с помощью системных вызовов Linux и / или популярных файловых систем Linux. Для ядра Дарвина проверьте системный вызов exchangengedata .

45
ответ дан 26 November 2019 в 16:58
поделиться

Surely mv instead of cp?

0
ответ дан 26 November 2019 в 16:58
поделиться
mv old tmp
mv curr old
mv tmp curr
0
ответ дан 26 November 2019 в 16:58
поделиться

использование mv означает, что у вас на одну операцию меньше, нет необходимости в последнем rm, также mv изменяет только записи каталога, поэтому вы не используете дополнительное дисковое пространство для копии.

Temptationh then заключается в реализации функции оболочки swap () или чего-то подобного. Если вы все же будете предельно осторожны, проверяйте коды ошибок. Может быть ужасно разрушительным. Также необходимо проверить наличие уже существующего файла tmp.

2
ответ дан 26 November 2019 в 16:58
поделиться

You could simply move them, instead of making a copy.

#!/bin/sh
# Created by Wojtek Jamrozy (www.wojtekrj.net)
mv $1 cop_$1
mv $2 $1
mv cop_$1 $2

http://www.wojtekrj.net/2008/08/bash-script-to-swap-contents-of-files/

6
ответ дан 26 November 2019 в 16:58
поделиться
$ mv old tmp && mv curr old && mv tmp curr

is slightly more efficient!

Wrapped into reusable shell function:

function swap()         
{
    local TMPFILE=tmp.$$
    mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
}
74
ответ дан 26 November 2019 в 16:58
поделиться
tmpfile=$(mktemp $(dirname "$file1")/XXXXXX)
mv "$file1" "$tmpfile"
mv "$file2" "$file1"
mv "$tmpfile" "$file2"
32
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

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