1

それぞれが有効なディレクトリである 2 つの引数を持つシェル スクリプトを作成する必要があります。スクリプトは、最初の引数で指定された最初のディレクトリに 2 番目のディレクトリと同じ名前の新しいディレクトリを作成し、新しく作成されたディレクトリに 2 番目のディレクトリの内容 (サブディレクトリとファイルの両方) をコピーします。ただし、拡張子が .txt のファイルのみをコピーします。

これは私がこれまでに得たものです:

#!/bin/bash
if [ ! $# -eq 2 ]
then echo usage: file.sh directory1 directory2
     exit 1
fi
if [ !  -d $1  ]
then echo $1 is not a directory \!
     exit 1
fi

if [ ! -d $2 ]
then echo $2 is not a directory \!
     exit 1
fi 
4

4 に答える 4

1

学生にデバッグを任せる:

die () { echo >&2 "$*"; echo "使い方...."; 出口1; }
from="$1";
to="$2";
[ ."$from" = . ] && die "from dir name missing";
[ ."$to" = . ] && die "to dir name missing";
[ -d "$from" ] || die "from dir $from ではないディレクトリから";
[ -d "$to" ] || die "to dir $to not a directory";
target="$to/$(basname "$from")"; #最終的なターゲットディレクトリ名、私があなたを正しく理解していれば。
"$from" を検索 -name '*.txt' -maxdepth=1 | cpio -pd "$to" ||
# (cd "$from" && find * -name '*.txt' -maxdepth=1 | cpio -o...) | ( cd "$to" && cpio -i...) ||
   die "cpio failed"

cpio には多くのオプションがあり、使用する前に確認する必要があることに注意してください。

コメントアウトされた手法により、別のターゲットディレクトリに自由に移動できますが、ここでは必要ないと思います。

悲しみを避ける: 常にファイル名を引用します。

于 2013-03-28T10:43:49.070 に答える
0

これをスクリプトの and に追加するだけです。

    cp -dR $2 $1
于 2013-03-28T10:24:40.070 に答える
0

rsyncを使用する可能性が高くなる可能性があります

例えば:

rsync -avz /dir1/ /dir2
于 2013-03-28T10:24:46.540 に答える
0

ファイル プロパティの保存に関する好みに応じて、cptarまたはrsync. フィルタリングは、コマンドを使用して取得できますfind

于 2013-03-28T10:24:48.600 に答える