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=0
0から反復を開始するようにシェルに指示する -
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?