2017-12-06 11 views
1

bashスクリプトのforループを逆にする必要があります。 %Y%m.mp4(201701.mp4; 201702.mp4、201703.mp4、...)の名前の動画があるディレクトリがあります。ループは最も古いファイル名(例:201712.mp4)で開始する必要があります。forループを元に戻すにはどうすればよいですか?bashスクリプトのforループを逆にする方法

outputdir="/path/to/video/monthly/" 

for file in "$outputdir"*.mp4 
do 

echo $file 

done 
+0

https://unix.stackexchange.com/questions/27382/how-do-i-reverse-a-for-loop –

+0

迅速な対応をありがとうございます。私はあなたのソリューションを既に試してみましたが、ファイル名のないパスを取得します。だからここで私は尋ねる。 – mbergmann

+2

あなたのポストで、あなたが試した共通の解決策と、なぜそれらがうまくいかなかったのかを説明することは理にかなっています。そうすれば、あなたはすでにあなたが排除したことを人々に伝える必要はありません。 –

答えて

4

次のように予約された順番にあなたのファイルを一覧表示することができます。

ls -1 $outputdir/*.mp4 | sort -r 

だからスクリプトであなたが行うことができます:

outputdir="/path/to/video/monthly/" 
for file in $(ls -1 $outputdir*.mp4 | sort -r) 
do 
    echo $file 
done 

:@PesaThe Asをこのソリューションは、スペースを含むファイル名では動作しないと指摘しました。 "$(ls -1 $outputdir*.mp4 | sort -r)"をして"$file"

UPDATEを使用します:それはあなたのためのケースがある場合は、コマンドを引用すべきである

test/test_1.txt 
test/test_2.txt 
test/test_3.txt 
test/test_4.txt 
test/test_5.txt 

mkdir test && cd $_ 
for i in {1..5}; do touch test_$i.txt; done 
cd - 

そしてls -1 test/*.txt意志の出力を次のテストを参照してください。そして、ls -1 test/*txt | sort -rが出力されます:

test/test_5.txt 
test/test_4.txt 
test/test_3.txt 
test/test_2.txt 
test/test_1.txt 
+3

注: 'ls -r'は、ls逆ソートを行う方法です。 – wildplasser

+1

また、 'touch test_ {1..5} .txt'を実行することもできます – PesaThe

+1

あなたの答えでは、あなたの解決策はパス/ファイルにスペースがあるなど、失敗すると言われるかもしれません。 – PesaThe

関連する問題