Существует ли способ заставить mv создать каталог, который будет перемещен в то, если он не существует?

Ответ на @thelatemail действительно крут,

Не будет больно узнать еще один трюк.

Вот мое решение:

dat[rowSums(is.na(dat))>0,]<- 0
dat
#  v1 v2 v3
#1 2  3  5
#2 0  0  0
#3 3  2  1
236
задан Paul Wicks 13 February 2009 в 21:15
поделиться

3 ответа

Как насчет этой остроты (в ударе):

mkdir --parents ./some/path/; mv yourfile.txt $_

Разрушение этого:

mkdir --parents ./some/path

создает каталог (включая все промежуточные каталоги), после который:

mv yourfile.txt $_

перемещает файл в тот каталог ($ _ расширяется до последнего аргумента, переданного предыдущей команде оболочки, т.е.: недавно созданный каталог).

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

Вот пример с помощью этой техники:

$ > ls
$ > touch yourfile.txt
$ > ls
yourfile.txt
$ > mkdir --parents ./some/path/; mv yourfile.txt $_
$ > ls -F
some/
$ > ls some/path/
yourfile.txt
266
ответ дан Elijah Lynn 23 November 2019 в 03:17
поделиться

Следующий сценарий оболочки, возможно?

#!/bin/sh
if [[ -e $1 ]]
then
  if [[ ! -d $2 ]]
  then
    mkdir --parents $2
  fi
fi
mv $1 $2

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

5
ответ дан Elijah Lynn 4 November 2019 в 13:01
поделиться

Можно использовать mkdir:

mkdir -p ~/bar/baz/ && \
mv foo.c ~/bar/baz/

Простой сценарий, чтобы сделать это автоматически (непротестированный):

#!/bin/sh

# Grab the last argument (argument number $#)    
eval LAST_ARG=\$$#

# Strip the filename (if it exists) from the destination, getting the directory
DIR_NAME=`echo $2 | sed -e 's_/[^/]*$__'`

# Move to the directory, making the directory if necessary
mkdir -p "$DIR_NAME" || exit
mv "$@"
13
ответ дан strager 23 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

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