ファイルを別のディレクトリにcp
したいのですが、そのディレクトリがまだ存在していません。
だから私はやります:
mkdir /new_place
cp the_file /new_place
これを1つでできますか?
「m」が「存在しないディレクトリを作成する」を意味する場合、cp the_file -m /new_place
のようなものを想像します
これはscp、rsync、または別のコピーユーティリティを使用するチャンスですか?
--parents
を使用すると、ソースから宛先へのディレクトリを再作成できます。例えば:
cp --parents ~/Downloads/test.txt ~/Desktop/
サブディレクトリ~/Desktop/home/desgua/Downloads
を作成し、test.txt
をその中にコピーします。そして
cp --parents Downloads/test.txt ~/Desktop/
~/Desktop/Downloads
を作成します。
次のコマンドでこれを行うことができます
# rsync --recursive the_file /path/to/your/dir/that/doesn't/exists/
注:パスの最後に「/」を使用:
ソースの最後に「/」を使用すると、rsyncは最後のフォルダーのコンテンツをコピーします。ソースの最後に「/」を使用しない場合、rsyncは最後のフォルダーとフォルダーのコンテンツをコピーします。
宛先の最後に「/」を使用すると、rsyncは最後のフォルダー内にデータを貼り付けます。宛先の最後に「/」を使用しない場合、rsyncは最後の宛先フォルダー名でフォルダーを作成し、そのフォルダー内にデータを貼り付けます。
desguaの答え は適切で簡単な方法ですが、もしあなたがprotableな方法を必要としたらどうでしょう? POSIX は--parent
フラグなしでcp
を定義するため、すべてのシステムで機能するわけではありません。
1つのオプションは、システムにインストールされている場合、Pythonで記述することです。
#!/usr/bin/env python3
from os import makedirs
from os.path import exists,basename
from shutil import copyfile
from sys import argv
if len(argv) < 3:
print('Not enough args',file=stderr)
exit(1)
filename = basename(argv[2])
dirs = argv[2].replace(filename,'')
makedirs(dirs)
copyfile(argv[1],argv[2])
これは次のように機能します。
$ ./mkdircp.py /etc/passwd $HOME/foodir/bardir/passwd.copy
$ stat --printf "%F\n" $HOME/foodir/bardir/passwd.copy
regular file
$ head -n 1 $HOME/foodir/bardir/passwd.copy
root:x:0:0:root:/root:/bin/bash
;を使用すると、2つのコマンドを簡単に入力できます。例えば:
mkdir folder; cp file.html folder
動作するはずです。