2016-09-27 7 views
0

bashは、特定のディレクトリを検索し、そのディレクトリの最も古いフォルダを返します。 bashは、各フォルダ内にサブフォルダがない場合に効果的です。それらがある場合は、メインフォルダの代わりに返されます。なぜこれが起こっているのか、それをどう修正するのかはわかりません。ありがとうございました :)。検索のサブフォルダがbashのメインフォルダではありません

例えば、

/home/cmccabe/Desktop/NGS/testがディレクトリでは検索し、その中に2つのフォルダ、R_1 and R_2

出力

The earliest folder is: R_1 

しかし、もし/ホーム/ cmccabe /デスクトップ/ NGSがあります/ test has R_1その中にtestfolder and R_2とその中のtestfolder2`

出力

The earliest folder is: testfolder 

あなたはLSについてお読みくださいバッシュ

cd /home/cmccabe/Desktop/NGS/test 
folder=$(ls -u *"R_"* | head -n 1) # earliest folder 
echo "The earliest folder is: $folder" 

答えて

1

lsは、この仕事には間違ったツールです。出力は人間ではなくスクリプトであり、印刷できない文字が存在するとしばしば驚くべきことです。その後...

dir=/home/cmccabe/Desktop/NGS/test # for my testing, it's "." 
{ 
    read -r -d $'\t' time && read -r -d '' filename 
} < <(find "$dir" -maxdepth 1 -mindepth 1 -printf '%T+\t%P\0' | sort -z -r) 

:あなたと仮定すると


はGNU findsort、リテラル改行を持つものも含め、すべての可能なファイル名では、次の作品を、持っている

echo "The oldest file is $filename, with an mtime of $time" 

移植性の高い最新のファイルまたは古いファイルの詳細については、 が含まれていないオプションを含むディレクトリには、GNUツールが必要です(BashFAQ #99を参照)。

+0

ご協力いただきありがとうございます。 – Chris

1

、-uオプションを使用すると、それがないと思う何をしません。関連するオプションは次のとおりです。

  • -u - 時刻を基準に並べ替えるときに最後の変更時刻の代わりに最後のアクセス時刻を使用するように指示します。最新の最初
  • -rで、(変更またはアクセスまたは何か他のものの)時間によってソート - - だから、それだけで、それは何もしない、-t
  • -tと呼ばれるべき出力の順
  • -dを反転 - ディレクトリを検索しません再帰的

だから、あなたが実際に必要なものです:

$ ls -trd 

または:

$ ls -utrd 
関連する問題