GNU/Linux >> Linux の 問題 >  >> Ubuntu

ディレクトリ内の最後の8ファイルのみを別のディレクトリに移動しますか?

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 ファイルを新しいディレクトリに移動します

Ubuntu
  1. Ubuntu ディレクトリ内のすべてのファイルの行数を数える

  2. Cを使用してディレクトリ内のファイル数を数える

  3. すべてのファイルをあるディレクトリから別のディレクトリに移動 (および上書き) する方法は?

  1. LinuxのNOTディレクトリのディレクトリ内のファイルのみを削除します

  2. ディレクトリ内の最後に変更された 5 つのファイルを一覧表示 (ls) するにはどうすればよいですか?

  3. Linuxで100万枚の画像をあるディレクトリから別のディレクトリに移動する最速の方法は何ですか?

  1. Linuxターミナルでファイルを移動する

  2. Mysqlデータディレクトリを移動する方法は?

  3. 同じコンピュータ上のあるユーザーアカウントから別のユーザーアカウントにファイルを移動する方法は?