ディレクトリ名をコマンドライン引数として使用し、ディレクトリ内の.tmp拡張子または.swp拡張子を持つ長さ0のファイルをすべて削除してディレクトリをクリーンアップするBashスクリプトを作成します。その後、そのディレクトリのアーカイブを作成し、アーカイブを圧縮して〜ディレクトリに入れますか?
#!/bin/bash
if [ -d $1 ]
then
find -empty -print -exec rm -f {} \;
find . -name "*.tmp" -print -exec rm -f {} \;
find . -name "*.swp" -print -exec rm -f {} \;
tar -zxvf $filename.tar.gz /~/ \;
else
echo "this file is not a directory"
fi
アーカイブセクションで停止しました。いくつかのヒントを提供できますか?ありがとうございます。良い一日をお過ごしください。
答え1
- これが宿題ならそう言わなければなりません。
- スクリプトは、指定したディレクトリ名に関係なく、現在のディレクトリのみを検索します。
- コマンドを使用してスクリプトを作成することは、自分が何をしているのかを知らない限り、
rm -f
非常に悪い考えです。find
\;
コマンドが終了するとtar
エラーが発生します。- #4によると、コマンド
;
の役割について混乱しているようですfind
。find
着信コマンドの終わりがどこにあるかを示す引数として渡されます。 - あなたの
tar
コマンドはアーカイブを生成するのではなく、アーカイブから抽出しようとしています。 - あなたの参照されていない変数。
/~/
シェルはそれをホームディレクトリ名に変換せず、~
単語の先頭にのみ表示されます。- 正しく実行されると、3つの
find
コマンドをすべて1つのコマンドにまとめることができます。
もっとたくさんあると確信しています。このサイトを見ると、たくさん学ぶことができます。
私たちは助けたいのですが、これは実際には「宿題ヘルプ」サイトではありません。これを証明すると、より多くの助けを得ることができます。あなたただ課題を果たしたいのではなく、本当に学びたいです。
答え2
tar
スクリプトにはいくつかの異なる問題があるため、カタログの作成方法に関する質問に具体的に答えるには、次のようにします。
tar -cvzf tarfile.tgz "$1"
tarfile.tarというgzipで圧縮されたtarが作成され、スクリプトパラメータのディレクトリがここに配置されます。