次のフォルダがあるとしましょう。
$ ls
css-tricks/ django-tutorial/ good-tuts.txt js-tut/ tutorials/ tuts.txt
それらのいくつかはtut
彼らの名前にあります。tut
その名前に含まれるすべてのファイル/フォルダをフォルダに移動したいと思いますtutorials/
。私がコマンドを実行すると
$ mv *tut* tutorials/
次のメッセージを受け取りました。
mv: cannot move 'tutorials' to a subdirectory of itself, 'tutorials/tutorials'
これが起こらないようにするにはどうすればよいですか?
私が考えることができるトリックの1つは、ターゲットフォルダの名前を一時的に別の名前に変更し、コマンドが実行された後に再び目的の名前に変更することです。しかし、もっとエレガントな解決策を知りたいです。
ベストアンサー1
個人的にインタラクティブにコマンドを実行しようとしている状況では、そうするとmv *tut* tutorials
「移動できません」というエラーが発生することが予想されます。これは無害で、他のファイルやディレクトリは期待どおりに移動されます。
コマンドの終了ステータスはゼロではないためエラーを示しますが、コマンドに依存するものがないため無視できます。
この場合、他の名前の前にはダッシュが付きますtut
。
mv *-tut* tutorials
または、このような項目を移動するには、python_tut
下線を使用できます。
mv *[_-]tut* tutorials
または、部分文字列の前に追加の文字を要求するにはtut
(tutorials
なし)
mv *?tut* tutorials
もう少し入力して考えてみると、次の拡張グローブパターンを使用できますbash
。
shopt -s extglob
mv *tut!(orials*) tutorials
tut
2番目のバリアントは、直後に文字列が続かない部分文字列を含むすべての項目と一致しますorials
。パターンが一致せずtutorials
スキップされますtutorials1
。