私はしばしば同様の方法で長いファイルのリストを選択的に保持する必要があり、プロセスを高速化するには各ファイルでキーを押すのcp -iar
ではなくキーを押すだけです。つまり、 と を押す必要がないようにしたいと思います。もちろん、代わりに別のキーを使用すると良いでしょう。y
n
ENTER
ENTER
y
n
y
n
これを行う方法はありますか?
答え1
私の考えでは、Midnight Commanderのようなファイルマネージャが必要なようです。 mcでは、insertまたは+を使用して複数のファイルを選択、削除、移動、またはコピーできます。完全なガイドラインとヒントは、以下で確認できます。地図時間。
file0〜file10がありますが、file1とfile3のみをコピーするとし、純粋なシェルコマンド(GUIなし)を試している場合:
cp file1 file3 directory/
もちろん、シェルを使って自分自身を助けることができます。
cp file{1,3} directory/
しかし、連続的なケースはどうですか?ファイル5をファイル10に?
cp file{5..10} directory/
より高度な機能が必要な場合は、find
次のように助けることができます。
find Downloads -name "*.cfg" -exec cp {} directory \;
します:
copy Downloads/file(6).cfg to directory
copy Downloads/file(7).cfg to directory
copy Downloads/file(1).cfg to directory
copy Downloads/file.cfg to directory
copy Downloads/file(2).cfg to directory
copy Downloads/file(4).cfg to directory
copy Downloads/file(3).cfg to directory
copy Downloads/file(5).cfg to directory
コピーしたいファイルを確認し、その-exec ...
部分を削除できます。-exec echo cp ...
findが何であるか疑問に思うなら、それを使うこともできます。
答え2
はい、可能です。しかし、少し複雑です。ここでは、このbashスクリプトをインポートしてPATHに入れる名前のファイル
に保存し、明らかにいくつかの改善が必要であることを忘れないでください。mycp.sh
chmod +x mycp.
#!/bin/bash
[ $# -ne 2 ] && echo -en "ERROR : Need 2 parameters.\n" && exit
[ -f $1 ] && cp $1 $2
if [ -d $1 ]
then
mkdir -p $2
cd $1
find . | while read fn
do
if [ -f $fn ]
then
read -r -n1 yesorno
if [ "$yesorno" == "y" ] || [ "$yesorno" == "Y" ]
then
mkdir -p $2/`dirname $fn`
cp $fn $2/`dirname $fn`
fi
fi
done
fi
答え3
y
この場合、[次へ]を押さないようにするには、前のEnter行(ターミナル設定のCtrl++)+改行文字Shiftを一度コピーし、メッセージが表示されたら(++)を貼り付けます。Cy
CtrlShiftV
ボタンではなく一度に押すことができるボタンであり、私にとってはそれだけで十分だ。次のプロンプトを待っている間に+を押し続けることができますCtrl。Shift
答え4
Slyx呼び出しに基づくread
単純な1行コードは次のとおりです。
{ while read -r -n1 i; do echo >&2; echo $i; done } | cp -iar …
Ctrlループを終了するには、最後に+を押す必要があります。Dこれまで、コマンドが完了した後にループを終了する魔法の方法が見つかりませんでした。トラップがSIGCHLD
望む方法で動作しないようです。 path という名前のファイルに保存すると、yesorno
次のように書くことができます。
#!/bin/bash
{ while read -r -n1 i; do echo >&2; echo $i; done } | "$@"
あるいは、これを関数として定義できます~/.bash_profile
。
yesorno() {
{ while read -r -n1 i; do echo >&2; echo $i; done } | "$@"
}
どちらの場合も、次のように呼び出すことができます。
yesorno cp -iar …