シェルを使用するときに使用できるように、ビデオファイルのすべての拡張子を格納する環境変数を宣言したいと思います。
いくつか試してみましたが、うまくいきませんでした。 .bash_profileに次のように入力する場合:
export VIDEOS={mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
最後の要素だけが必要です。
[nbarraille@nbarraille ~]echo $VIDEOS
mpeg
私の.bash_profileに次のように入力した場合:
export VIDEOS="{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}"
または
export VIDEOS='{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}'
その後、それを表示すると大丈夫に見えますが、lsで使用すると、次のようには機能しません。
[nbarraille@nbarraille ~] echo $VIDEOS
{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
[nbarraille@nbarraille ~] ll *.$VIDEOS
ls: cannot access *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}: No such file or directory
変数を使わずに同じコマンドを実行すると動作します。
[nbarraille@nbarraille ~] echo *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
example.avi
example2.mpg
また、再起動すると、.bash_profileがロードされず、$ VIDEOS変数が空のように見えます。source ~/.bash_profile
操作するには1つの作業を実行する必要がありました(そして新しい端末を開くたびに再び作業を実行する必要がありました)。
どんなアイデアがありますか?
ありがとうございます!
答え1
あなたのコマンドは次に拡張されます。
export VIDEOS=mp4 VIDEOS=wmv VIDEOS=avi VIDEOS=flv VIDEOS=mkv VIDEOS=m4u VIDEOS=mpg VIDEOS=mpeg
次のコマンドを実行して何が起こるかを確認してください。
echo export VIDEOS={mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
(それは知られている支柱の拡張)
2番目の問題は、bash
中括弧拡張がパラメータ拡張以降ではなく以前に発生するため、解決策のように見えるすべてが混乱する可能性があることです。
あなたはこれをしなければなりません:
eval echo \*.$VIDEOS
書くたびにイライラする。
次のようなものはどうですか?
videos() {
find . -mindepth 1 -maxdepth 1 -type f \
\( -name "*.mp4" -o -name "*.wmv" -o -name "*.avi" -o \
-name "*.flv" -o -name "*.mkv" -o -name "*.m4u" -o \
-name "*.mpg" -o -name "*.mpeg" \)
}
次に、次のことを行う代わりに:
ls *.$VIDEOS
これを行う:
videos
またはそれをコマンドに渡す必要がある場合:
ls $(videos)
この部分は働きます:
echo *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
.bash_profile
うまくいかないという手がかりかもしれません。たとえば、これを使用していることを意味できますzsh
。
これが何をしているのか教えてください:
echo $0
これにより、どのファイルを入れるべきかを把握できます。
答え2
これを達成するために配列を使用することができる。構文は少し異なります。
export VIDEOS=(.mp4 .wmv .avi .flv .mkv .m4u .mpg .mpeg)
それから
ls ${VIDEOS[*]/./*.}
名前で始まる動画のみを一覧表示するには、foo
次の手順を実行します。
ls ${VIDEOS[*]/./foo*.}
答え3
エイリアスやスクリプトはどうですか? :
ls -m *.mp4 *.wmv *.avi *.flv *.mkv *.m4u *.mpg *.mpeg 2>/dev/null
名前を付けるlvd
- 文字数が少ない(注:lv
多言語ファイルビューア)。