ㅏ前の質問私の友人がtarを介してダウンロードしたファイルを転送する方法を尋ねたので、mvを介してtarの出力を転送する方法を知りたいです。今、次のコマンドがあります。
wget -c https://github.com/JeffHoogland/moksha/archive/0.1.0.tar.gz | tar -xz
これにより、というディレクトリが作成されますが、このコマンドの最後にあるパイプ()を介してmoksha-0.1.0
この出力ディレクトリの名前を変更する方法を知りたいです。パイプなしでこれを行う方法を知っていますが、まだwgetとtarと同じコード行にある場合でも喜んで受け入れます。moksha
|
明らかに言えば、
wget -c https://github.com/JeffHoogland/moksha/archive/0.1.0.tar.gz | tar -xz -C moksha
出力ディレクトリが作成されますが、moksha
この出力ディレクトリにはこのディレクトリがありますが、代わりにこのディレクトリの名前をという名前の新しいディレクトリに配置する代わりに置き換えたいとmoksha-0.1.0
思います。moksha-0.1.0
moksha
moksha-0.1.0
moksha
答え1
このように?
[root@b se]# wget -cqO - https://github.com/JeffHoogland/moksha/archive/0.1.0.tar.gz | tar -xz --transform=s/moksha-0.1.0/moksha/
[root@b se]# ls
moksha
[root@b se]# ls moksha
ABOUT-NLS config.guess debian Makefile.am
aclocal.m4 config.guess.dh-orig depcomp Makefile.in
AUTHORS config.h.in doc missing
autogen.sh config.rpath enlightenment.pc.in netwm.txt
autom4te.cache config.sub enlightenment.spec.in NEWS
BACKPORTS config.sub.dh-orig INSTALL po
BUGS configure install-sh README
ChangeLog configure.ac intl src
compile COPYING ltmain.sh xdebug.sh
config data m4 x-ui.sh
tar
マニュアルページから:
--変形=表現する, --xform=表現する sed を使用した交換表現するファイル名を変換します。
だからsed
これが必要かもしれません。しかし、あなたが持っているなら、wget
おそらくあなたsed
もそうでしょう。
答え2
注:私の答えは本当ではありませんtar
。これはあなたの質問のこの部分に対する具体的な答えです。
...これはというディレクトリを作成しますが、このコマンドの最後にあるパイプ()を介して
moksha-0.1.0
この出力ディレクトリの名前を変更する方法を知りたいのです。パイプなしでこれを行う方法を知っていますが、まだwgetとtarと同じコード行にある場合でも喜んで受け入れます。moksha
|
パイプは、あるコマンドの標準出力を次のコマンドの標準入力に接続します。これはファイルにはあまり関係がなく、パイプラインの前のコマンドで生成されたファイルの移動とは間違いありません。
あなたが望むものは一つです。リスト。
からman bash
:
AND and OR lists are sequences of one of more pipelines separated by
the && and ││ control operators, respectively. AND and OR lists are
executed with left associativity. An AND list has the form
command1 && command2
command2 is executed if, and only if, command1 returns an exit status
of zero.
コマンドに対して簡単なif-thenチェックを実行するか、他のコマンドが成功するかどうかを条件として指定する最も簡単な方法は、次のようにすることです&&
。
[ -r somefile ] && cat somefile
# Checks if somefile exists and is readable; cats the file if it is.
sed -f sedscript inputfile > outputfile && mv outputfile inputfile
# One way (not the best) to edit a file in place.
# The point is that the second command only executes if the first command "succeeds" (i.e. returns a zero exit status).
したがって、特定のコマンドの場合は、次のようにします。
(The whole command you wrote) && mv moksha-0.1.0 moksha
答え3
できない管路mv
ファイル自体 -mv
ソースファイルは標準入力から読み取られません。この場合、最良の方法はtar
ターゲットディレクトリです(例:ディーブの答え)または後で名前を変更します(例:ワイルドカードの回答)。
私は前者を好みますが、代わりに次-C
を使用します。--strip-components
--transform
mkdir moksha && wget -c https://github.com/JeffHoogland/moksha/archive/0.1.0.tar.gz |
tar -xzC moksha --strip-components=1
(-C
やるいいえ実際には、それを生成するパラメータは、少なくとも私のシステムのBSDやGNUにはありませんtar
。 )
これは移植性が高く(BSDにはtar
文字列がない--transform
)、他の場所でその文字列を含むファイル名を変更しませんmoksha-0.1.0
。代わりに、抽出された各ファイルパスの最初のコンポーネントのみを削除します(moksha-0.1.0/ABOUT-NLS
例:ABOUT-NLS
.tar
新しいディレクトリに変更したため、アーカイブmoksha
のすべての内容が新しいディレクトリに抽出されます。
質問にリンクしたアーカイブのルートには1つのディレクトリしかありませんが、アーカイブでこのテクノロジを使用していることに注意してください。多くの種類ルートのディレクトリは、そのディレクトリのすべての内容を指定されたディレクトリにダンプします-C
。この場合、より良いサービスを受けることができます。必要に応じて抽出し、名前を変更します。。