Скопируйте каждый файл в структуру каталога в конкретный путь, только если файл там не существует

Вам не нужно обновлять систему. Обновите youtube-dl, добавив этот PPA:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install youtube-dl

Затем вы можете скачать любое видео, как обычно. Например:

youtube-dl https://www.youtube.com/watch?v=Ix1rD4JD3eo
8
задан 20 June 2017 в 09:10

9 ответов

Вы можете использовать переключатель -u из команды cp:

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

или используйте команду rsync с --ignore-existing:

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

пропустить обновления файлов, существующих на приемнике

rsync --ignore-existing source/* destination/
13
ответ дан 22 May 2018 в 21:22

Вы можете использовать переключатель -u из команды cp:

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

или используйте команду rsync с --ignore-existing:

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

пропустить обновления файлов, существующих на приемнике

rsync --ignore-existing source/* destination/
13
ответ дан 18 July 2018 в 11:23

Вы можете использовать переключатель -u из команды cp:

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

или используйте команду rsync с --ignore-existing:

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

пропустить обновления файлов, существующих на приемнике

rsync --ignore-existing source/* destination/
13
ответ дан 24 July 2018 в 19:47

Ваша исходная команда может быть переписана как:

find . -type f -exec bash -c 'test -e /target-directory/"$1" || cp "$1" /target-directory' sh {} \;

Ключевым моментом здесь является то, что мы вызываем оболочку с определенными командами и передаем найденный файл в качестве аргумента $1. Если test -e /target-directory/"$1" терпит неудачу, значит, файл не существует, и в этом случае cp скопирует файл.

В общем случае можно использовать другие команды, если команда может проверить существование файл. Некоторые другие альтернативы:

/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
3
ответ дан 22 May 2018 в 21:22
  • 1
    Почему stat проверяет существование файла в Bash? Не было бы test -e намного проще? – David Foerster 20 June 2017 в 10:29
  • 2
    @DavidFoerster Нет особой причины. команда test также сделает. Я отредактирую свой ответ позже, если я не забуду – Sergiy Kolodyazhnyy 20 June 2017 в 19:16

Прочитайте man cp и используйте опцию --no-clobber для cp.

0
ответ дан 22 May 2018 в 21:22

Ваша исходная команда может быть переписана как:

find . -type f -exec bash -c 'test -e /target-directory/"$1" || cp "$1" /target-directory' sh {} \;

Ключевым моментом здесь является то, что мы вызываем оболочку с определенными командами и передаем найденный файл в качестве аргумента $1. Если test -e /target-directory/"$1" терпит неудачу, значит, файл не существует, и в этом случае cp скопирует файл.

В общем случае можно использовать другие команды, если команда может проверить существование файл. Некоторые другие альтернативы:

/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
3
ответ дан 18 July 2018 в 11:23

Прочитайте man cp и используйте опцию --no-clobber для cp.

0
ответ дан 18 July 2018 в 11:23

Ваша исходная команда может быть переписана как:

find . -type f -exec bash -c 'test -e /target-directory/"$1" || cp "$1" /target-directory' sh {} \;

Ключевым моментом здесь является то, что мы вызываем оболочку с определенными командами и передаем найденный файл в качестве аргумента $1. Если test -e /target-directory/"$1" терпит неудачу, значит, файл не существует, и в этом случае cp скопирует файл.

В общем случае можно использовать другие команды, если команда может проверить существование файл. Некоторые другие альтернативы:

/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
3
ответ дан 24 July 2018 в 19:47
  • 1
    Почему stat проверяет существование файла в Bash? Не было бы test -e намного проще? – David Foerster 20 June 2017 в 10:29
  • 2
    @DavidFoerster Нет особой причины. команда test также сделает. Я отредактирую свой ответ позже, если я не забуду – Sergiy Kolodyazhnyy 20 June 2017 в 19:16

Прочитайте man cp и используйте опцию --no-clobber для cp.

0
ответ дан 24 July 2018 в 19:47

Другие вопросы по тегам:

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