特定のファイル/フォルダーを除いてtarディレクトリへのシェルコマンド


811

アーカイブから特定のファイル/フォルダーを除外することをサポートする単純なシェルコマンド/スクリプトはありますか?

バックアップする必要のない非常に大きなファイルが多数あるサブディレクトリを使用してアーカイブする必要があるディレクトリがあります。

完全なソリューションではありません:

tar --exclude=PATTERNコマンドは、指定されたパターンと除外これらのファイルと一致しますが、私は特定のファイル&フォルダを無視する(完全なファイルパス)、そうでない場合は、有効なファイルが除外される可能性がありますが必要です。

また、findコマンドを使用してファイルのリストを作成し、アーカイブしたくないファイルを除外してtarにリストを渡すこともできますが、これは少量のファイルに対してのみ機能します。何万人もいます。

唯一の解決策は、除外するファイル/フォルダーのリストを含むファイルを作成し、次にrsync with --exclude-from=fileを使用してすべてのファイルをtmpディレクトリにコピーし、次にtarを使用してそのディレクトリをアーカイブすることであると考え始めています。

誰かがより良い/より効率的なソリューションを考えることができますか?

編集:Charles Maのソリューションはうまく機能します。重要なのは、tarコマンドの先頭に--exclude='./folder' 必ず配置する必要があることです。完全なコマンド(最初にcdを実行するため、バックアップはそのディレクトリに対して相対的です):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

120
もう1つ、そのことに気づきました。注意する価値があるかもしれません。除外されたフォルダーの末尾にスラッシュが付いていると、tar それらのフォルダーをまったく除外しません
Rekhyt

7
@Rekhytありがとう、コマンドを15分間見つめていました...その後30
イヤカム

9
--excludeの位置はtarのバージョンに依存するようです。tar 1.23の場合、-excludeはメインコマンドの後に置く必要があります。
Joel G Mathew 2013年

2
「 '」(引用符)を忘れないでください。
Meetai.com 2013

3
--exclude最初にする必要はありませんが、ソースディレクトリの前のどこかに置く必要があります(Cygwinのtar 1.29でテスト済み)。
ワートワート2017

回答:


1038

tarには複数の除外オプションを設定できるため、

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

などは動作します。確認してください入れて--exclude 前に、送信元と送信先のアイテム。


78
この答えは--excludeが最初に来るように見えます... tar cvfpz ../stuff.tgz --exclude = 'node_modules' --exclude = '。git'。
James O'Brien

13
あなたがアップロードフォルダを除く、バックアップWordPressのプロジェクトフォルダにしようとしている場合の例として、あなたは、このコマンドを使用することができます:タール-cvf wordpress_backup.tar wordpressの--exclude = WP-コンテンツ/アップロード
shasi kanth

12
私は次のコマンドを思いつきました:フラグがtarファイルの前にある必要があることにtar -zcv --exclude='file1' --exclude='patter*' --exclude='file2' -f /backup/filename.tgz . 注意して-fください:superuser.com/a/559341/415047
Alfred Bez

21
excludeディレクトリの末尾に「/」があると、失敗します。tarは、末尾の/を除外するディレクトリ名の一部と見なしていると思います。悪い例:--exclude = mydir /良い例:
ジョサイア

4
>ソースと宛先の項目の前に--excludeを必ず入れてください。または、excludeに絶対パスを使用します。tar -cvpzf backups / target.tar.gz --exclude = '/ home / username / backups' / home / username
NightKnight on Cloudinsidr.com

131

--excludefor tarでディレクトリを除外できます。

/usrあなたが使用できる以外のすべてをアーカイブしたい場合:

tar -zcvf /all.tgz / --exclude=/usr

あなたの場合、おそらく次のようなもの

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir

17
明確にするために、-excludeにフルパスを使用できます。
Johan Soderberg、

2
場合によっては、アーカイブするファイル/フォルダの前に--excludeを
付ける

68

tarを使用してバックアップからファイル/ディレクトリを除外するための可能なオプション:

複数のパターンを使用してファイルを除外する

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

パターンのリストで満たされた除外ファイルを使用してファイルを除外する

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

スキップする必要があるディレクトリにタグファイルを配置して、タグを使用してファイルを除外する

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup

3
パラメータの順序が重要であるようで、このフォームは私にとってはうまくいきます。
cstamas 2018年

1
私も。Ubuntu 16.04上のtar(GNU tar)1.28の場合、この特定の順序のパラメーターのみが機能しました。
alvaroreig 2018年

43

古い質問と多くの回答がありますが、十分に明確なものはなかったので、もう一度試してみます。

次の構造がある場合

/home/ftp/mysite/

次のファイル/フォルダー

/home/ftp/mysite/file1
/home/ftp/mysite/file2
/home/ftp/mysite/file3
/home/ftp/mysite/folder1
/home/ftp/mysite/folder2
/home/ftp/mysite/folder3

したがって、(サイトを新しいサーバーに移動するために)/ home / ftp / mysite内にすべてを含むtarファイルを作成する必要がfile3ありますが、それはただのジャンクであり、すべてがfolder3不要なので、これら2つはスキップします。

私たちはフォーマットを使います

tar -czvf <name of tar file> <what to tar> <any excludes>

ここで、c = create、z = zip、v = verbose(入力時にファイルを確認できます。除外するファイルが追加されていないことを確認するのに便利です)。およびf =ファイル。

だから、私のコマンドはこのようになります

cd /home/ftp/
tar -czvf mysite.tar.gz mysite --exclude='file3' --exclude='folder3'

除外されるファイル/フォルダーは、tarのルートに相対的であることに注意してください(ここでは、/からの相対パスでフルパスを試しましたが、機能しません)。

これが誰かを助けてくれることを願っています(そして私が次にそれをググるとき)


6
この答えは間違いなく私を助けました!私にとっての問題は、私のコマンドがのようなものtar -czvf mysite.tar.gz mysite --exclude='./mysite/file3' --exclude='./mysite/folder3'であり、これによって何も除外されなかったことです。
アニッシュラマスワミー2015年

2
あなたのサンプルは私が問題を抱えていたものと非常に似ていました!ありがとうございました!
Qorbani 16

2
素敵で明確なありがとうございます。私にとっての問題は、他の答えには絶対相対パスが含まれるということでした。ただし、除外するフォルダの名前を追加するだけです。
ヒューバート

2
これははるかに明確な答えです。例のため、最初はパスが混乱していたので、それを機能させることができました。本当にありがとう!
fagiani '19

2
動いた!excludeの後にスラッシュを追加しないように注意してください。たとえば、「file3」または「file3 / subfolder」は機能しますが、「file3 /」および「file3 / subfolder /」は機能しません。
-lucaferrario

24

標準の「ant表記」を使用して、相対ディレクトリを除外できます。
これは私にとっては機能し、.gitまたはnode_moduleディレクトリを除外します。

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/*  -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txtには以下が含まれます。

/ dev2 / java
/ dev2 / javascript


4
これには、Bashシェルオプション変数globstarを有効にする必要があると思います。に確認してくださいshopt -s globstar。ほとんどのUNIXベースのOSでは、デフォルトでオフになっていると思います。Bashマニュアルから: " globstar: 設定されている場合**、ファイル名展開コンテキストで使用されるパターンは、すべてのファイルと0個以上のディレクトリおよびサブディレクトリに一致します。パターンの後に「/」が続く場合、ディレクトリとサブディレクトリのみが一致します。 "
not2qubit

15

私は、少なくともで、ことを経験したのCygwinのtarのバージョンIは、Windows XP Home Editionの上( "CYGWIN_NT-5.1 1.7.17(0.262 / 5月3日)2012年10月19日午後2時39 i686のCygwinを"使用していますSP3マシン)、オプションの順序は重要です。

この構造が私のために働いた間:

tar cfvz target.tgz --exclude='<dir1>' --exclude='<dir2>' target_dir

それはうまくいきませんでした

tar cfvz --exclude='<dir1>' --exclude='<dir2>' target.tgz target_dir

これtar --helpにより、次のことが明らかになります。

tar [OPTION...] [FILE]

したがって、2番目のコマンドも機能するはずですが、明らかにそうではありません...

最高のrgds、


5
上記に追加したいだけですが、除外するディレクトリに最後のバックスラッシュを含めないことが重要です。したがって、--exclude = '/ path / to / exclude / dir'CORRECT--exclude = '/ path / to / exclude / dir /'WRONGです。
GeertVc 2013

17
これは、ターゲットアーカイブtarget.tgzがfスイッチの引数であり、それに続く必要があるためです
Valentino

14

この除外パターンは、pngやmp3などのファイル名のサフィックスと、.gitやnode_modulesなどのディレクトリ名を処理します

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball}  ${source_dirname}

ありがとう-それが私が探していたものです:)
Alexander Br。

11

これに問題がある場合、tarの一部のバージョンは、exclude値に「./」がないと正しく機能します。

Tar --version

tar(GNU tar)1.27.1

機能するコマンド構文:

tar -czvf ../allfiles-butsome.tar.gz * --exclude=acme/foo

これらは機能しません:

$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=./acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='./acme/foo'
$ tar --exclude=./acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='./acme/foo' -czvf ../allfiles-butsome.tar.gz *
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=/full/path/acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='/full/path/acme/foo'
$ tar --exclude=/full/path/acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='/full/path/acme/foo' -czvf ../allfiles-butsome.tar.gz *

10

私は別の場所でこれを見つけたので、信用しませんが、私のMac固有の問題については、上記のどのソリューションよりもうまくいきました(これはクローズされていますが)。

tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>

2
この回答のおかげで、ダーウィンのtarの構文は間違いなく異なっており、他の回答の "--exclude = blah"が機能しないのはなぜか、とんでもないことでした。これはMacでうまくいきました。
Michael

1
COPYFILE_DISABLE=1tarを使用するときは忘れないでください。そうしないと、
tar_ballに

あなたの答えを含めてくれてありがとう。あなたが答えを見つけたソースへのリンクを含めることは常に良いことです。ボーナス:ソースが別のstackoverflowまたはstackexchange投稿からのものである場合、余分なカルマ(ポイントまたはバッジ-どちらか覚えていません)を取得します。いずれにせよ、彼らは笑顔になり、誰もが勝利します。欠点はありません:-)追加情報を検索したい場合にも役立ちます。時々、あなたがソースリンクを含めただけで人々は賛成するでしょう。最後に、これが対処した特定の問題、またはこれがより優れたソリューションである理由を共有すると、固有の問題を持つ他の誰かを助けることができます。
SherylHohman

8

Mac OSXの場合は、

tar -zcv --exclude='folder' -f theOutputTarFile.tar folderToTar

-f後に注意してください--exclude=


6

--excludeフラグが正しいアプローチであることに同意します。

$ tar --exclude='./folder_or_file' --exclude='file_pattern' --exclude='fileA'

すぐに明らかではない副作用についての警告の言葉:この例での「fileA」の除外は「fileA」を再帰的に検索します!

例:同じ名前のファイル(data.txt)を含む単一のサブディレクトリを持つディレクトリ

data.txt
config.txt
--+dirA
  |  data.txt
  |  config.docx
  • --exclude='data.txt'アーカイブを使用する場合、EITHER data.txtファイルは含まれません。これにより、node_modulesディレクトリなどのサードパーティライブラリをアーカイブすると、予期しない結果が生じる可能性があります。

  • この問題を回避するには、次のようにパス全体を指定してください。 --exclude='./dirA/data.txt'


5

何万ものファイルを処理'xargs: Argument list too long'するfind ... | xargs ...ときにを使用することによるエラーの可能性を回避するために、の出力をfind直接をtar使用してパイプすることができますfind ... -print0 | tar --null ...

# archive a given directory, but exclude various files & directories 
# specified by their full file paths
find "$(pwd -P)" -type d \( -path '/path/to/dir1' -or -path '/path/to/dir2' \) -prune \
   -or -not \( -path '/path/to/file1' -or -path '/path/to/file2' \) -print0 | 
   gnutar --null --no-recursion -czf archive.tar.gz --files-from -
   #bsdtar --null -n -czf archive.tar.gz -T -

次のように 'exclude'文字列を引用できます: 'somedir / filesdir / *'そうすると、シェルはアスタリスクや他の白い文字を展開しません。
Znik

xargs -n 1xargs: Argument list too longエラーを回避するもう1つのオプションです;)
Tuxdude

5

このスレッドを読んだ後、RHEL 5で少しテストを行いました。abcディレクトリをtarで圧縮した結果は次のとおりです。

これにより、ディレクトリエラー、ログ、およびディレクトリの下のすべてのファイルが除外されます。

tar cvpzf abc.tgz abc/ --exclude='abc/error' --exclude='abc/logs'

除外されたディレクトリの後にワイルドカードを追加すると、ファイルは除外されますが、ディレクトリは保持されます。

tar cvpzf abc.tgz abc/ --exclude='abc/error/*' --exclude='abc/logs/*'

上記の2番目の例では、各exclude句の最後のスラッシュの後にアスタリスクが必要ですが、ポストはそれらを受け取りませんでした。
マイク

4

findコマンドをtar追加(-r)オプションと組み合わせて使用​​します。この方法では、2パスソリューション(ファイルのリストの作成、tarの作成)の代わりに、単一の手順で既存のtarにファイルを追加できます。

find /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} \;

4

必要に応じて、「-exclude-tag」オプションのいずれかを使用することもできます。

  • --exclude-tag = FILE
  • --exclude-tag-all = FILE
  • --exclude-tag-under = FILE

指定されたFILEをホストしているフォルダーは除外されます。


4

さまざまなバージョンのこの良い答えをすべて読んで自分で問題を解決した後、GNU / Linuxの一般的な使用は非常に重要で非常に小さな細部があり、十分に強調されておらず、コメント以上の価値があると思います。

だから私はすべてのケースの質問に答えようとするつもりはありませんが、代わりに、物事がうまくいかないときにどこを見るべきかを登録してみてください

通知することは非常に重要です:

  1. オプションの重要性:バックアップするファイルオプションとディレクトリの前後に--excludeを置くのと同じではありません。私の経験では、GNU / Linuxコマンドでは、通常、オプションの順序は重要ではないので、これは少なくとも私には予想外です。
  2. 異なるtarバージョンは、このオプションを異なる順序で想定します。たとえば、@ Andrewの回答は、GNU tar v 1.26および1.28では除外が最後になることを示していますが、私の場合、GNU tar 1.29では逆です。
  3. トレーリングスラッシュの問題:少なくともGNU tar 1.29では、それはあり得ません

私の場合、Debianストレッチ上のGNU tar 1.29の場合、機能したコマンドは

tar --exclude="/home/user/.config/chromium" --exclude="/home/user/.cache" -cf file.tar  /dir1/ /home/ /dir3/

引用符は関係ありませんでした。引用符の有無に関係なく機能しました。

これが誰かに役立つことを願っています。


お返事ありがとうございます。私は解決策を探していました(非常に長い時間のように感じました)が、あなたの答えが正しい方向に導きました。ただし、私の場合(Ubuntu 18.04.3、Tar 1.29)は、パスではなくフォルダ名を追加することでのみ機能します。例:tar --exclude = folder1 --exclude = folder2 -czvf / opt / archieve。 tgzフォルダー
Nitai

2

cpio(1)を使用してtarファイルを作成できます。cpioはstdinでアーカイブするファイルを取得するため、アーカイブを選択するために使用するfindコマンドがすでにわかっている場合は、それをcpioにパイプしてtarファイルを作成します。

find ... | cpio -o -H ustar | gzip -c > archive.tar.gz

2

gnu tar v 1.26 --excludeは、アーカイブファイルとバックアップディレクトリの引数の後に来る必要があり、先頭または末尾にスラッシュがあってはならず、引用符(シングルまたはダブル)を優先しません。したがって、バックアップするPARENTディレクトリと比較すると、次のようになります。

tar cvfz /path_to/mytar.tgz ./dir_to_backup --exclude=some_path/to_exclude


多くの実験の後、私はのコマンドでほぼ同じものを見つけましたtar (GNU tar) 1.28
PicoutputCls 2018

2
tar -cvzf destination_folder source_folder -X /home/folder/excludes.txt

-Xは、バックアップから除外する必要があるファイル名のリストを含むファイルを示します。インスタンスの場合、このファイルで*〜を指定して、バックアップに〜で終わるファイル名を含めないようにすることができます。


これはそれらのケースでも機能するので、除外の数が多いことが最善の解決策だと思います。オプションパックにXオプションを含めることも可能ですので、最短の形式は、おそらくです:tar cXvfJ EXCLUDE-LIST ARCHIVE.tar.xz SOURCE-FOLDER
甲斐Petzke

0

あなたの最善の策は、xargsを介してtarでfindを使用することです(多数の引数を処理するため)。例えば:

find / -print0 | xargs -0 tar cjf tarfile.tar.bz2

4
これにより、tarが複数回呼び出され、ファイルが繰り返しパックされます。正解は次のとおりです。find / -print0 | tar -T- --null --no-recursive -cjf tarfile.tar.bz2
jørgensen

私がどこかで読んだところ、実際に大量の結果が見つかると、xargsはそれらの結果を(ローカルコマンドライン引数の制限に基づいて)チャンクに分割し、各部分でtarを呼び出すため、代わりにxargstar rオプションを使用する必要があることを読みました。これは、コマンドによって返されたすべての結果ではなく、によって返された最後のチャンクを含むアーカイブになります。cfindxargsfind
Stphane

0

冗長な回答の可能性がありますが、便利だと思ったので、ここに示します

FreeBSDルート(つまりcshを使用)の間に、ルートファイルシステム全体を/ mntにコピーしたかったのですが、/ usrと(明らかに)/ mntはありませんでした。これはうまくいきました(私は/にいます):

tar --exclude ./usr --exclude ./mnt --create --file - . (cd /mnt && tar xvd -)

私の全体的な要点は、(./を置くことによって)除外されるディレクトリがより大きいディレクトリの一部がコピーされる場所であることをtar に指定する必要があったということです。

私の€0.02


0

数レベルの5ギガバイトのサブディレクトリをtarで除外することができませんでした。最後に、私はunix Zipコマンドを使用しました。それは私にとってずっと簡単に働きました。

したがって、元の投稿からのこの特定の例
(tar --exclude = '。/ folder' --exclude = '。/ upload / folder2' -zcvf /backup/filename.tgz。)

同等のものは次のとおりです。

zip -r /backup/filename.zip。-xアップロード/フォルダ/ ** \ *アップロード/フォルダ2 / ** \ *

(注:/superuser/312301/unix-zip-directory-but-excluded-specific-subdirectories-and-everything-within-tを助けてくれた私が最初に使用した投稿は次のとおりです)


3
注意:zip空のディレクトリはパックしませんが、パックtarします!
t0r0X 2014

0

見てみな

tar cvpzf zip_folder.tgz . --exclude=./public --exclude=./tmp --exclude=./log --exclude=fileName

0

localhostに新しいフロントエンドバージョン(angularフォルダー)を配置したい。また、私の場合はgitフォルダーが非常に大きいため、除外したいと思います。アプリケーションを実行するには、サーバーからダウンロードして解凍する必要があります。

/ var / lib / tomcat7 / webappsからangularフォルダーを圧縮し、angular.23.12.19.tar.gzという名前で/ tmpフォルダーに移動します

コマンド:

tar --exclude='.git' -zcvf /tmp/angular.23.12.19.tar.gz /var/lib/tomcat7/webapps/angular/

0

成功例:1)バックアップを取るためにフルパスを与える場合、excludeではフルパスを使用する必要があります。

tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude = '/ opt / ABC / csv / ' --exclude = '/ opt / ABC / log / ' / opt / ABC

2)バックアップを取るための現在のパスを指定する場合、excludeでも現在のパスのみを使用する必要があります。

tar -zcvf backup_27032020.tar.gz --exclude = 'ABC / csv / ' --exclude = 'ABC / log / ' ABC

失敗例:

  1. バックアップを取るためのcurrentpathディレクトリと無視するためのフルパスを与えると、機能しません

    tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude = '/ opt / ABC / csv / ' --exclude = '/ opt / ABC / log / ' ABC

注:バックアップ前/後のバックアップディレクトリを除外することは問題ありません。


0

バージョンコントロールシステム(VCS)ファイルを除外しようとしている場合、tarはすでに2つの興味深いオプションをサポートしています。:)

  1. オプション:--exclude-vcs

このオプションはバージョン管理システムを、以下で使用される除外ファイルとディレクトリを:CVSRCSSCCSSVNArchBazaarMercurial、とDarcs

バージョン1.32以降、次のファイルは除外されます。

  • CVS/、およびその下のすべて
  • RCS/、およびその下のすべて
  • SCCS/、およびその下のすべて
  • .git/、およびその下のすべて
  • .gitignore
  • .gitmodules
  • .gitattributes
  • .cvsignore
  • .svn/、およびその下のすべて
  • .arch-ids/、およびその下のすべて
  • {arch}/、およびその下のすべて
  • =RELEASE-ID
  • =meta-update
  • =update
  • .bzr
  • .bzrignore
  • .bzrtags
  • .hg
  • .hgignore
  • .hgrags
  • _darcs

    1. オプション:--exclude-vcs-ignores

いくつかのバージョン管理システム(VCS)の下にあるディレクトリをアーカイブする場合、それはこのVCS」から除外パターンを読み取ることが便利であることが多いが、ファイル(例えば無視する.cvsignore.gitignoreなど)このオプションは、そのような可能性を提供します。

:ディレクトリをアーカイブする前に、それは次のいずれかのファイルが含まれているかどうかを確認しcvsignore.gitignore.bzrignore、または.hgignore。その場合は、これらのファイルから無視パターンを読み取ります。

パターンは、対応するVCSが処理するのと同じように処理されます。

.cvsignore

このファイルが存在するディレクトリにのみ適用されるシェルスタイルのグロビングパターンが含まれています。ファイルにコメントを含めることはできません。空行は無視されます。

.gitignore

シェルスタイルのグロビングパターンが含まれています。.gitfileがあるディレクトリとそのすべてのサブディレクトリに適用されます。

aで始まる行 #でコメントです。バックスラッシュはコメント文字をエスケープします。

.bzrignore

シェルのグロビングパターンと正規表現が含まれます(接頭辞がRE:(16)の場合)。パターンは、ディレクトリとそのすべてのサブディレクトリに影響します。

a #で始まる行はすべてコメントです。

.hgignore

posix正規表現が含まれています(17)。行syntax: globはシェルグロビングパターンに切り替わります。ラインsyntax: regexpが元に戻ります。コメントはaで始まります#。パターンは、ディレクトリとそのすべてのサブディレクトリに影響します。

tar -czv --exclude-vcs --exclude-vcs-ignores -f path/to/my-tar-file.tar.gz path/to/my/project/


-1

次のbashスクリプトでうまくいくはずです。ここでは、Marcus Sundmanによる回答を使用しています。

#!/bin/bash

echo -n "Please enter the name of the tar file you wish to create with out extension "
read nam

echo -n "Please enter the path to the directories to tar "
read pathin

echo tar -czvf $nam.tar.gz
excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs`
echo $pathin

echo tar -czvf $nam.tar.gz $excludes $pathin

これにより、必要なコマンドが出力され、コピーして貼り付けることができます。コマンドラインに直接提供するより洗練された方法がおそらくあります。

除外する他の一般的な拡張子、ファイル名、または正規表現の* .CCを変更するだけで、これは引き続き機能します。

編集する

少し説明を追加します。findは、選択した正規表現(この場合は* .CC)に一致するファイルのリストを生成します。このリストは、xargsを介してechoコマンドに渡されます。--exclude「リストから1つのエントリ」を出力します。スラッシュ()は、 'マークのエスケープ文字です。


1
対話型入力を要求することは、ほとんどのシェルスクリプトにとって設計上の選択としては不十分です。それは代わりに、コマンドラインパラメータを読んで、あなたはなどのシェルのタブ補完、履歴完了、履歴編集の利益をプレゼント
tripleee

1
さらに、スクリプトは、空白またはシェルのメタ文字を含むパスに対しては機能しません。あなたは、必要がある基本的にいつもあなたが特に空白トークン化とワイルドカード拡張を実行するためにシェルを必要としない限り、二重引用符で変数を置きます。詳細については、以下を参照してくださいstackoverflow.com/questions/10067266/...
tripleee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.