Есть ли способ заставить mv создать каталог для перемещения, если он не существует? - PullRequest
216 голосов
/ 14 февраля 2009

Итак, если я нахожусь в своем домашнем каталоге и хочу переместить foo.c в ~ / bar / baz / foo.c, но эти каталоги не существуют, есть ли способ автоматически создать эти каталоги , так что вам нужно будет только набрать

mv foo.c ~/bar/baz/ 

а все бы получилось? Похоже, вы могли бы использовать псевдоним mv для простого сценария bash, который проверял бы, существуют ли эти каталоги, а если нет, вызывал бы mkdir, а затем mv, но я подумал, что проверю, есть ли у кого-нибудь идея получше.

Ответы [ 15 ]

0 голосов
/ 17 апреля 2019
((cd src-path && tar --remove-files -cf - files-to-move) | ( cd dst-path && tar -xf -))
0 голосов
/ 27 декабря 2018

Вы можете объединять команды: mkdir ~/bar/baz | mv foo.c ~/bar/baz/
или скрипт оболочки здесь:

#!/bin/bash
mkdir $2 | mv $1 $2

1. Откройте любой текстовый редактор
2. Скопируйте и вставьте сценарий оболочки.
3. Сохранить как mkdir_mv.sh
4. Введите каталог вашего скрипта: cd your/script/directory
5. Изменить режим файла : chmod +x mkdir_mv.sh
6. Set alias : alias mv="./mkdir_mv.sh"
Теперь при каждом запуске команды mv будет создан перемещаемый каталог, если он не существует.

0 голосов
/ 30 июня 2018

Код:

if [[ -e $1 && ! -e $2 ]]; then
   mkdir --parents --verbose -- "$(dirname -- "$2")"
fi
mv --verbose -- "$1" "$2"

Пример:

аргументы: "d1", "d2 / sub"

mkdir: created directory 'd2'
renamed 'd1' -> 'd2/sub'
0 голосов
/ 23 августа 2017

Мое одностроковое решение:

test -d "/home/newdir/" || mkdir -p "/home/newdir/" && mv /home/test.txt /home/newdir/
0 голосов
/ 30 июня 2016
$what=/path/to/file;
$dest=/dest/path;

mkdir -p "$(dirname "$dest")";
mv "$what" "$dest"
...