最初の3つのファイルをアルファベット順でbから始まるディレクトリから別のディレクトリに移動する必要があります。私はこのコマンドを思いつきました:
find /users/students/ejackson/A3-ejackson-55688-114906/CS282in \
-name "b*" | sort | head -3
そして、それは適切なファイルを生成しますが、私はそれらで何もできません。理想的には、上記のコマンドの出力をmv
にパイプするだけですが、それが可能だとは思いません。
(追伸:grep
、sed
またはawk
なしでこれを行う必要があります)
find
の出力を解析する(非常に悪い考え)代わりに、for
が規則的な方法でファイルをループするという事実を利用できます。
i=0; for b in /path/to/files/b*; do (( ++i < 4 )) && echo mv -v -- "$b" /path/to/destination; done
実際にファイルを移動するには、テスト後にecho
を削除します。
ここにいコメントがあります:
# set a variable to 0 so we can increment it
i=0
# glob for the files starting with b
for b in /path/to/files/b*; do
# test how many times the loop has been run and if it's less than 4...
(( ++i < 4 )) &&
# ... then move the files*
echo mv -v -- "$b" /path/to/destination
done
*これは、行の先頭からecho
を削除するまで発生しません-代わりに、移動するファイルと移動する場所をエコーします(各反復の変数を展開します)
これがtcshで機能するかどうかはわかりませんが、bashで機能するため、主にbashを使用する他のUbuntuユーザーに役立つ可能性があります
tcsh
を使用していると述べました。 Cシェルのファミリーは、Bourneシェルと互換性がありません。このコマンドは機能する可能性があります。
set THREE_FILES=`find …`
cp $THREE_FILES NEW_DIRECTORY
最初のset
コマンドは、THREE_FILES
という新しい環境変数を作成し、その変数に出力を保存します。 cp
は3つのファイルを取り、NEW_DIRECTORY
にコピーします。