Ответ на @thelatemail действительно крут,
Не будет больно узнать еще один трюк.
Вот мое решение:
dat[rowSums(is.na(dat))>0,]<- 0
dat
# v1 v2 v3
#1 2 3 5
#2 0 0 0
#3 3 2 1
Как насчет этой остроты (в ударе):
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
Следующий сценарий оболочки, возможно?
#!/bin/sh
if [[ -e $1 ]]
then
if [[ ! -d $2 ]]
then
mkdir --parents $2
fi
fi
mv $1 $2
Это - базовая деталь. Вы могли бы хотеть включить немного для проверки на аргументы, и можно хотеть, чтобы поведение изменилось, если место назначения существует, или исходный каталог существует или не существует (т.е. не перезаписывайте что-то, что не существует).
Можно использовать 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 "$@"