Documentsから最後の8つのファイルを移動しようとしています ディレクトリを別のディレクトリに移動しますが、それらを1つずつその特定のディレクトリに移動したくありません。 tailの代わりにそれらを移動することは可能ですか? コマンドですが、ファイルではなくディレクトリ用ですか? tail -8 ./Documents | mv ./Anotherdirectory またはmv tail -8 ./Documents ./Anotherdirectory 。
実際、私は最後の8つのファイルを移動できる賢い方法を探しています(lsにリストされています)。 )他のディレクトリにすばやく(それぞれの名前を入力せずに)移動します。何か提案はありますか?
承認された回答:
forを使用できます 、これは順序付けられた方法でファイルをループし、findの出力の解析を回避できるようにします またはls 、ファイル名のスペースやその他の特殊文字の問題を回避するため。これを改善してくれた@muruに感謝します🙂
i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done
最初にechoでテストします 、次にechoを削除します 実際にファイルを移動します。
スクリプトとして:
#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
if (( (j - ++i) < 8 )); then
echo mv -v -- "$k" ~/AnotherDirectory
fi
done
もう一度、echoを削除します 実際にファイルを移動するためのテスト後
説明
-
i=00から反復を開始するようにシェルに指示する -
j=$(stat ~/Documents/* --printf "%in" | wc -l )これは変数jを設定しています ディレクトリ内のファイルの総数に等しい整数に。名前に含まれる文字に関係なく、ファイルを確実にカウントする方法に関する私自身の質問に対するSergの回答に感謝します -
do if (( (j - ++i) < 8 ))ループの反復ごとに、jの結果が ループが実行された回数を差し引いた回数が8回未満である場合は、 -
mv -v -- "$k" ~/AnotherDirectoryファイルを新しいディレクトリに移動します
15.10ブラックスクリーンの問題に関するBumblebeeIntel+ nvidia?
Ubuntuで他のデスクトップ環境を使用する-スタジオとExchangeが必要なときはいつでも?、XfceからUnity&Vise?