home/homeLife
というフォルダがあります
/ homeに格納されているhome1、home2、home3というファイルがあります。
home*
で始まるすべてのファイルをhome/homeLife/.
に移動したい。
入力した
mv home* /home/homeLife
cannot move homeLife into subdirectory of itself
私の質問:ディレクトリを除外するにはどうすればよいですか?
zsh
では、グロブ修飾子を使用します。
mv home*(.) dst
regularファイルのみを移動します。
ながら
mv home*(^/) dst
任意のタイプのファイルを移動しますexceptディレクトリ。
mv home*(^-/) dst
ディレクトリへのシンボリックリンクも除外します。
検索を使用できます。以下はうまくいくはずです。
find . -name home\* -type f -maxdepth 1 -exec mv {} /home/homeLife/. \;
移植性の高い方法でグロブ一致リストを整理できます。
set --; cd /home
for f in ./home*
do [ ! -L "$f" ] &&
[ -f "$f" ] &&
set "$@" "$f"
done
[ "$#" -eq 0 ] || mv "$@" ./homeLife
あなたはすでに閉じています。ファイルを移動するにはhome1
、home2
、home3
グロビングパターンを使用するhome?
。
mv home? /home/homeLife/
?
は任意の1文字を示し、*
は任意の文字数(なしを含む)を示します。
Bash拡張グロブを使用できます。
shopt -s extglob ## activate extglogs if not yet done
mv home!(*Life) homeLife/ ## !(p1|...) = anything except one of the patt
もちろん、ファイルが3つしかない場合は、
_ mv home1 home2 home3 homeLife
_
ドキュメントを読むよりも、手動で行う方が簡単な場合があります。 _home*
_という名前のファイルが本当に多数ある場合、私が使用する1つのトリック(現在はbashの一部です)は、グロブの一致をすべて展開し、不要な一致を手動で削除することです。グロブを展開するには、次のように入力します Ctrl+x* glob式を入力した後。コマンドラインで展開され、手動で修正します。
たとえば、私のディレクトリにたくさんの「テスト」ファイルがあり、それらすべてをに加えて_test2
_の他に新しいファイルに分類したいとします。
_cat test*
_
今タイプしてください Ctrl+x*、そしてそれは
_cat test test10 test11 test12 test13 test14 test15 test16 test17 test2 test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 test3 test30 test31 test32 test33 test34 test35 test36 test37 test38 test4 test5 test6 test7 test8 test9 testa testb testbuild testc testd teste testf
_
次にカーソルを戻して_test2
_を5つのバックスペースで削除し、コマンドラインの最後に_> test_all
_を追加します。
_cat test test10 test11 test12 test13 test14 test15 test16 test17 test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 test3 test30 test31 test32 test33 test34 test35 test36 test37 test38 test4 test5 test6 test7 test8 test9 testa testb testbuild testc testd teste testf > test_all
_
他にもたくさんの機能があります Ctrl+x、しかしこれは私が覚えている唯一のものです。