Как я могу переместить файл в путь аргумента? - PullRequest
2 голосов
/ 01 марта 2012

Скажите, у меня был следующий код,

mkdir $1
# Output that the folder was created and the name
echo "The folder was created and name is: `echo $1`"

touch $2
# Output that the file was created and the name
echo "The file was created and name is: `echo $2`"

Как я могу переместить созданный файл в созданную папку аргументов?

Ответы [ 5 ]

2 голосов
/ 01 марта 2012

Вам необходимо использовать команду mv

т.е. mv $2 $1

2 голосов
/ 01 марта 2012
touch "$1/$2"

Предполагается, что $2 - простое имя.Или, если вы должны использовать mv, то:

touch "$2" &&
mv "$2" "$1"

Или:

touch "$2" &&
mv "$2" "$1/$2"

Возможно, вам придется подумать о том, что произойдет, если $2 не простой файлимя, но содержит некоторую информацию о пути.В этом случае первая комбинация «касайся и двигайся» является более безопасной.Обратите внимание, что эти версии проверяют успешность touch перед перемещением созданного файла.Также обратите внимание, что touch работает нормально, если файл уже существует, и этот файл будет перемещен в целевой каталог.Если файл не должен существовать (пока), вам снова придется работать усерднее.Вот в чем проблема с этими вопросами - есть много обстоятельств, с которыми, возможно, придется иметь дело, но, вероятно, не для домашнего вопроса (но его следует рассмотреть в чем-то более «производственном коде»).

В противном случае, если $2 может быть именем с информацией о пути:

mkdir "$1" || exit 1
base=$(basename "$2")
touch "$1/$base" || exit 1

Или, если вы хотите переместить, то:

mkdir "$1" || exit 1
touch "$2" || exit 1
mv "$2" "$1"

Обратите внимание на кавычки вокруг имен файлов;они будут работать, даже если имена содержат пробелы или другие неуклюжие символы.Также обратите внимание, что если $2 указывает каталог, версия mv будет перемещать весь каталог под (только что созданный) каталог $1.

0 голосов
/ 01 марта 2012
mv $2 $1
echo "The file $2 was moved to $1"

Обратите внимание, что вам не нужен второй echo в каждой из ваших команд:

echo "The folder was created and name is: $1"
0 голосов
/ 01 марта 2012

Проверьте, какие команды можно использовать для копирования или, в этом случае, перемещения файлов, которые вы создали.Кроме того, что мешает вам создать файл непосредственно в созданной папке?

0 голосов
/ 01 марта 2012

Будет ли mv $2 $1 то, что вы ищете?

...