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

Фоновый процесс с выводом stdOut/StdErr в файлах и консоли
BASH: асинхронное выполнение команд с задержкой
Shell-скрипт, чтобы передать аргументы в другой скрипт
Создать ярлык для папки с пробелами и дефисами
Преобразование видео в WebM с помощью ffmpeg/avconv
Использование wget для рекурсивного обхода сайта и загрузки изображений
Зачем использовать parens вместо backticks для выполнения команды "in situ"?
Сценарий Bash завершается ошибкой " синтаксическая ошибка в условном выражении"
Где хранить скрипты bash, которые все пользователи могут выполнять в Debian?
Bash скрипты не работают, но на Mac терминала эти команды в скриптах работает
Не удается получить доступ к файлам Windows с помощью Linux Bash для windows 10
Samba net команда для завершения работы Windows 8 машина [дубликат]
утилита командной строки для записи с микрофона
Запустить сеанс PuTTy на удаленном хосте по сети
Скрипт Bash, который автоматически меняет раскладки клавиатуры и мыши на основе активного окна

Однострочная команда для перемещения с сохранением той же структуры папок

Я уже нашел много решений этой проблемы, но все они копируют и после удаления файлов. Мне нужна одна команда, которая перемещает или копирует и удаляет файл за файлом.

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

find . -name "*.extension" -exec cp --parent {} ../NewFolder/ ;

использование OSX. Благодаря.

5
задан Marcelo Filho
источник

2 ответов

вместо того, чтобы просто копировать в exec, сделайте две вещи с "cp ..... && rm {} \;"

&& в bash означает ' выполнить следующую команду, только если предыдущая команда завершилась успешно (с кодом ошибки 0)

1
отвечен djsmiley2k 2017-03-24 17:31:33
источник

для того чтобы передразнить cp --parents, вы должны использовать mkdir и mv вместе.

find . -name "*.extension" -exec sh -c 'dir=../NewFolder/$(dirname "{}"); mkdir -p "$dir" && mv -v "{}" "$dir"' \;

подробный консоли скопируйте'paste:

$ tree source
source
└── a
    ├── b
    │   ├── b.extension
    │   ├── c
    │   │   └── c.extension
    │   └── d
    └── e
        └── f
            └── f.extension

6 directories, 3 files
$ tree dest
dest

0 directories, 0 files
$ cd source
$ find . -name "*.extension" -exec sh -c 'dir=../dest/$(dirname "{}"); mkdir -p "$dir" && mv -v "{}" "$dir"' \;
'./a/e/f/f.extension' -> '../dest/./a/e/f/f.extension'
'./a/b/c/c.extension' -> '../dest/./a/b/c/c.extension'
'./a/b/b.extension' -> '../dest/./a/b/b.extension'
$ cd ..
$ tree source
source
└── a
    ├── b
    │   ├── c
    │   └── d
    └── e
        └── f

6 directories, 0 files
$ tree dest
dest
└── a
    ├── b
    │   ├── b.extension
    │   └── c
    │       └── c.extension
    └── e
        └── f
            └── f.extension

5 directories, 3 files
1
отвечен glenn jackman 2017-03-24 17:29:21
источник

Другие вопросы bash command-line file-transfer macos