答え1
そしてzsh
:
set -o extendedglob
cp -- ^*<->*(D^/) /path/to/destination/
または、cp -- ^*[0-9]*(D^/) destination/
1つ以上のASCII 10進数シーケンス(無制限<->
形式)と一致します。<x-y>
(^
否定演算子としてD
隠されたファイルが含まれ、^/
ディレクトリタイプのファイルも除外されるため、//なしではコピーは拒否されますcp
。)-r
-R
-a
bash
同じ
shopt -s extglob failglob dotglob
cp -- !(*[0123456789]*) /path/to/destination/
!(x)
(kshでは、extglob
それを使用するコードを読み取るときに設定する必要があります)zshと同じ、^x
qualifierdotglob
と同じで、D
bashには対応するエントリはありません^/
。そうでない場合、一致するファイルがない場合は、文字通りfailglob
呼び出されたファイルをコピーできます。!(*[0123456789]*)
nullglob
POSIXバージョンのglobを使用することは常に実装するのが非常に困難でした。 glob修飾子やそれに対応する、failglob
(zshの基本動作)またはglobdot
//修飾子もなくkshスタイルやzshスタイル否定演算子もないからdotglob
ですD
。
set -- [*] *
[ "$1$2" = '[*]*' ] && shift
shift
set -- .[*] .* "$@"
[ "$1$2" = '.[*].*' ] && shift
shift
for file do
case "$file" in
(*[0123456789]* | . | ..) ;;
(*) [ -d "$file" ] && [ ! -L "$file" ] || set -- "$@" "$file";;
esac
shift
done
[ "$#" -gt 0 ] && echo cp -- "$@" /path/to/destination/
ただし、以下を使用できますfind
。
LC_ALL=C find . ! -name . -prune ! -name '*[0-9]*' ! -type d \
-exec sh -c 'exec cp "$@" /path/to/destination/' sh {} +
LC_ALL=C
-name
sが*
ユーザーロケールでテキストとしてデコードできないバイトシーケンスと一致しない可能性があることを解決します。C
ロケール内でも[0-9]
同じ[0123456789]
です。ただし、これは、一部の文字のエンコードにASCII番号のバイト値が含まれているBIG5やGB18030などの文字セットでエンコードされたファイル名を除外できることを意味します。中国と顧客国以外の地域では可能性が低い。
zsh
テキストのみで構成されていない文字セットまたはファイル名を使用して、ロケールとファイル名を処理できる必要があります。bash
また、ファイル名を完全にデコードできない場合は、バイトごとの一致に切り替えます。これは、上記のBIG5 / GB18030と同じ状況を含むいくつかの特別な場合に驚くべき結果をもたらす可能性があります。
zsh
' は[0-9]
常に bash と同じで、[0123456789]
C/POSIX ロケールの外ではほとんど発生しません。
あなたの:
cp [!0-9] *[!0-9] *[!0-9] 対象
次の理由で機能しません。
[!0-9]
: ファイル名は、0 から 9 までの順序を除く単一文字です。これらの単一文字がない場合、予約されたファイル名は、bash
使用されていないか、failglob
有効になっていない場合は2桁のファイル名です。nullglob
[!0-9]
*[!0-9]
:0〜9の順序ではなく、文字で終わるファイル名です。1234567X
たとえば、So が一致します。*[!0-9]
繰り返しますが、これは誤字のようです。しかし、あなたが意図した場合は[!0-9]*
一致しますX12345
。あなたが意味する場合は*[!0-9]*
一致します1234X5678
。
regexpと同等^[^0-9]*$
またはより良いことを意味する場合、regexp^[^0123456789]*$
は*
0以上を意味します。前のこと0以上の代わりに数値*([!0123456789])
globでは、Kornスタイルの拡張glob(bashでもサポートされていますextglob
)または[^0-9]#
zsh拡張globになります。 EREに対応するものについては、+([!0123456789])
(ksh)と(zsh)も参照してください(とにかくファイル名が空ではないため、ここには影響しません)。[^0-9]##
+
--
また、オプションの終わりを表示するのを忘れた場合に始まるすべてのファイル名は-
オプションとして扱われますcp
。たとえば、-rt..
GNUというファイルの場合、他のすべてのファイルは最終的に親ディレクトリに繰り返しcp
コピーされます。/path/to/destination
答え2
POSIXアプローチは、0から9の間にソートされた文字を含むファイルを保存し([0-9]
;または;で10進数を使用するか、[[:digit:]]
0123456789と数字のみを使用[0123456789]
)、残りをコピーして保存されたセットを復元することです。
mkdir ".save.$$" &&
mv ./*[0-9]* ".save.$$/"
cp ./* /target/directory/ &&
mv ".save.$$"/* . &&
rmdir ".save.$$"
意図的にドットファイルをコピーしません。これを含めるには、より複雑なソリューションが必要です。
答え3
まあ、これが最善の方法かどうかはわかりませんが、次のように動作します。
cp $(ls --ignore="*[0-9]*") YOUR_DIR
編集する:
(最初のコマンドを使用しない理由についての@StéphaneChazelasのコメントを読んでください。)
これはよりうまく機能するかもしれません:
find . -type f -maxdepth 1 -not -regex '.*[0-9].*' -exec cp {} move \;
答え4
使用幸せ(以前のPerl_6)
raku -e 'for dir(test => none / \d /, ".", "..") { copy $_, $_ ~ ".bak" };'
RakuはPerlプログラミング言語系列の言語です。上記のRakuコードは、.bak
同じディレクトリにバックアップファイルを生成します。これは、次のような興味深い演算子クラス/型を使用します。接合。 Raku言語にはnone
、、、one
および4つの結合タイプがありますany
。all
~$ ls
persons.txt places.txt thx1138.txt
~$ perl6 -e 'for dir(test => none / \d /, ".", "..") { copy $_, $_ ~ ".bak" };'
~$ ls
persons.txt persons.txt.bak places.txt places.txt.bak thx1138.txt
上記(特に)は、none
次の3つの項目のJunctionのリストを提供します。
- 数値を含むファイル名
\d
(正規表現マッチングを使用)、 "."
ディレクトリをクリックして、- ピアツーピア
".."
ディレクトリ。
正しいファイル名が選択されると、ファイル名の後に(Rakuで文字列を連結するために使用される単一のチルダ文字)で構成されるバックアップファイルにチャンクがコピーされ$_
ます。copy
.bak
~
別のディレクトリへのバックアップ/コピー:
Rakuには、ファイルを別のディレクトリにコピーおよび/またはバックアップするためのいくつかのオプションがあります。 aはpath
adirname
とで構成されていることに注意してくださいbasename
。ある時点では、パスのabsolute
代わりにパスをインポートしたい場合があります。または、昇順パスを使用して(の同義語)を使用してパスにディレクトリを追加することもできます。ヒントについては、下記の「入力/出力の最終ガイド」リンクをご覧ください。relative
resolve
parent
add
child
これを行う1つの方法は次のとおりです(バックアップ/Tmp
ディレクトリにコピーし、元のファイル名は変更されません)。
~$ raku -e 'my $Cwd = $*CWD; \
mkdir(my $Tmp = $Cwd.parent.add: "/Tmp/"); \
for $Cwd.dir(test => none / \d /, ".", "..") {
copy $_, IO::Path($Tmp ~ $_.basename)
};'
~$ cd ../Tmp
~$ ls
persons.txt places.txt
https://docs.raku.org/type/IO/Path
https://docs.raku.org/言語/io-guide#Input/Output_the_definitive_guide