cat a very large number of files together in correct orderWhat defines the maximum size for a command single argument?Deleting large number of filesreverse cat files orderFind files with particular filename format, cat each one with a header file, and save result to original file for each such file/bin/cat: Argument list too longWould cat *.txt concatenate files in alphabetical order?cat files in specific order based on number in filenameExtracting list of filenames, including ones with blanks, from findCan I disable command execution in findserial device output looks fine in gnu screen but garbled using catCan I script recreation of files such their inodes/mtimes increase in filename order? Across subdirectories?

I probably found a bug with the sudo apt install function

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

What is the offset in a seaplane's hull?

How does one intimidate enemies without having the capacity for violence?

What would happen to a modern skyscraper if it rains micro blackholes?

Why are 150k or 200k jobs considered good when there are 300k+ births a month?

Question about Goedel's incompleteness Proof

Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)

What exactly is the parasitic white layer that forms after iron parts are treated with ammonia?

Banach space and Hilbert space topology

Can I interfere when another PC is about to be attacked?

What would the Romans have called "sorcery"?

Prevent a directory in /tmp from being deleted

How do I create uniquely male characters?

"which" command doesn't work / path of Safari?

How old can references or sources in a thesis be?

Why CLRS example on residual networks does not follows its formula?

Why don't electron-positron collisions release infinite energy?

Draw simple lines in Inkscape

What typically incentivizes a professor to change jobs to a lower ranking university?

Theorems that impeded progress

Is it tax fraud for an individual to declare non-taxable revenue as taxable income? (US tax laws)

Is there a familial term for apples and pears?

Download, install and reboot computer at night if needed



cat a very large number of files together in correct order


What defines the maximum size for a command single argument?Deleting large number of filesreverse cat files orderFind files with particular filename format, cat each one with a header file, and save result to original file for each such file/bin/cat: Argument list too longWould cat *.txt concatenate files in alphabetical order?cat files in specific order based on number in filenameExtracting list of filenames, including ones with blanks, from findCan I disable command execution in findserial device output looks fine in gnu screen but garbled using catCan I script recreation of files such their inodes/mtimes increase in filename order? Across subdirectories?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








19















I have about 15,000 files that are named file_1.pdb, file_2.pdb, etc. I can cat about a few thousand of these in order by doing:



cat file_1..2000.pdb >> file_all.pdb


However, if I do this for 15,000 files, I get the error



-bash: /bin/cat: Argument list too long


I have seen this problem being solved by doing find . -name xx -exec xx but this wouldn't preserve the order with which the files are joined. How can I achieve this?










share|improve this question



















  • 3





    What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

    – roaima
    Feb 26 '18 at 17:33












  • I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

    – roaima
    Feb 26 '18 at 17:36






  • 11





    depends on the system what the limit is. getconf ARG_MAX should tell.

    – ilkkachu
    Feb 26 '18 at 17:43











  • @ilkkachu new one to me - thank you

    – roaima
    Feb 26 '18 at 21:40






  • 3





    Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

    – msouth
    Feb 27 '18 at 6:32

















19















I have about 15,000 files that are named file_1.pdb, file_2.pdb, etc. I can cat about a few thousand of these in order by doing:



cat file_1..2000.pdb >> file_all.pdb


However, if I do this for 15,000 files, I get the error



-bash: /bin/cat: Argument list too long


I have seen this problem being solved by doing find . -name xx -exec xx but this wouldn't preserve the order with which the files are joined. How can I achieve this?










share|improve this question



















  • 3





    What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

    – roaima
    Feb 26 '18 at 17:33












  • I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

    – roaima
    Feb 26 '18 at 17:36






  • 11





    depends on the system what the limit is. getconf ARG_MAX should tell.

    – ilkkachu
    Feb 26 '18 at 17:43











  • @ilkkachu new one to me - thank you

    – roaima
    Feb 26 '18 at 21:40






  • 3





    Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

    – msouth
    Feb 27 '18 at 6:32













19












19








19


3






I have about 15,000 files that are named file_1.pdb, file_2.pdb, etc. I can cat about a few thousand of these in order by doing:



cat file_1..2000.pdb >> file_all.pdb


However, if I do this for 15,000 files, I get the error



-bash: /bin/cat: Argument list too long


I have seen this problem being solved by doing find . -name xx -exec xx but this wouldn't preserve the order with which the files are joined. How can I achieve this?










share|improve this question
















I have about 15,000 files that are named file_1.pdb, file_2.pdb, etc. I can cat about a few thousand of these in order by doing:



cat file_1..2000.pdb >> file_all.pdb


However, if I do this for 15,000 files, I get the error



-bash: /bin/cat: Argument list too long


I have seen this problem being solved by doing find . -name xx -exec xx but this wouldn't preserve the order with which the files are joined. How can I achieve this?







files find cat brace-expansion






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 27 '18 at 6:55







sodiumnitrate

















asked Feb 26 '18 at 17:25









sodiumnitratesodiumnitrate

355413




355413







  • 3





    What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

    – roaima
    Feb 26 '18 at 17:33












  • I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

    – roaima
    Feb 26 '18 at 17:36






  • 11





    depends on the system what the limit is. getconf ARG_MAX should tell.

    – ilkkachu
    Feb 26 '18 at 17:43











  • @ilkkachu new one to me - thank you

    – roaima
    Feb 26 '18 at 21:40






  • 3





    Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

    – msouth
    Feb 27 '18 at 6:32












  • 3





    What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

    – roaima
    Feb 26 '18 at 17:33












  • I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

    – roaima
    Feb 26 '18 at 17:36






  • 11





    depends on the system what the limit is. getconf ARG_MAX should tell.

    – ilkkachu
    Feb 26 '18 at 17:43











  • @ilkkachu new one to me - thank you

    – roaima
    Feb 26 '18 at 21:40






  • 3





    Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

    – msouth
    Feb 27 '18 at 6:32







3




3





What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

– roaima
Feb 26 '18 at 17:33






What is the tenth file named as? (Or any file with more than a single digit numbered ordering.)

– roaima
Feb 26 '18 at 17:33














I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

– roaima
Feb 26 '18 at 17:36





I (now) have 15,000 of these files in a directory and your cat file_1..15000.pdb construct works fine for me.

– roaima
Feb 26 '18 at 17:36




11




11





depends on the system what the limit is. getconf ARG_MAX should tell.

– ilkkachu
Feb 26 '18 at 17:43





depends on the system what the limit is. getconf ARG_MAX should tell.

– ilkkachu
Feb 26 '18 at 17:43













@ilkkachu new one to me - thank you

– roaima
Feb 26 '18 at 21:40





@ilkkachu new one to me - thank you

– roaima
Feb 26 '18 at 21:40




3




3





Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

– msouth
Feb 27 '18 at 6:32





Consider changing your question to "thousands of " or "a very large number of" files. Might make the question easier to find for other people with a similar problem.

– msouth
Feb 27 '18 at 6:32










6 Answers
6






active

oldest

votes


















47














Using find, sort and xargs:



find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
sort -zV |
xargs -0 cat >all.pdb


The find command finds all relevant files, then prints their pathnames out to sort that does a "version sort" to get them in the right order (if the numbers in the filenames had been zero-filled to a fixed width we would not have needed -V). xargs takes this list of sorted pathnames and runs cat on these in as large batches as possible.



This should work even if the filenames contains strange characters such as newlines and spaces. We use -print0 with find to give sort nul-terminated names to sort, and sort handles these using -z. xargs too reads nul-terminated names with its -0 flag.



Note that I'm writing the result to a file whose name does not match the pattern file_*.pdb.




The above solution uses some non-standard flags for some utilities. These are supported by the GNU implementation of these utilities and at least by the OpenBSD and the macOS implementation.



The non-standard flags used are




  • -maxdepth 1, to make find only enter the top-most directory but no subdirectories. POSIXly, use find . ! -name . -prune ...


  • -print0, to make find output nul-terminated pathnames (this was considered by POSIX but rejected). One could use -exec printf '%s' + instead.


  • -z, to make sort take nul-terminated records. There is no POSIX equivalence.


  • -V, to make sort sort e.g. 200 after 3. There is no POSIX equivalence, but could be replaced by a numeric sort on specific parts of the filename if the filenames have a fixed prefix.


  • -0, to make xargs read nul-terminated records. There is no POSIX equivalence. POSIXly, one would need to quote the file names in a format recognised by xargs.

If the pathnames are well behaved, and if the directory structure is flat (no subdirectories), then one could make do without these flags, except for -V with sort.






share|improve this answer




















  • 1





    You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

    – Kevin
    Feb 27 '18 at 0:52






  • 6





    You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

    – kojiro
    Feb 27 '18 at 3:48






  • 4





    @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

    – msouth
    Feb 27 '18 at 6:30






  • 1





    @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

    – Kusalananda
    Feb 27 '18 at 7:14







  • 1





    It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

    – Scott
    Feb 28 '18 at 8:32


















14














With zsh (where that 1..15000 operator comes from):



autoload zargs # best in ~/.zshrc
zargs file_1..15000.pdb -- cat > file_all.pdb


Or for all file_<digits>.pdb files in numerical order:



zargs file_<->.pdb(n) -- cat > file_all.pdb


(where <x-y> is a glob operator that matches on decimal numbers x to y. With no x nor y, it's any decimal number. Equivalent to extendedglob's [0-9]## or kshglob's +([0-9]) (one or more digits)).



With ksh93, using its builtin cat command (so not affected by that limit of the execve() system call since there's no execution):



command /opt/ast/bin/cat file_1..15000.pdb > file_all.pdb


With bash/zsh/ksh93 (which support zsh's x..y and have printf builtin):



printf '%sn' file_1..15000.pdb | xargs cat > file_all.pdb


On a GNU system or compatible, you could also use seq:



seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


For the xargs-based solutions, special care would have to be taken for file names that contain blanks, single or double quotes or backslashes.



Like for -It's a trickier filename - 12.pdb, use:



seq -f ""./-It's a trickier filename - %.17g.pdb"" 15000 |
xargs cat > file_all.pdb





share|improve this answer

























  • The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

    – Hastur
    Feb 27 '18 at 11:38












  • Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

    – Hastur
    Feb 27 '18 at 11:41












  • @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

    – Stéphane Chazelas
    Feb 27 '18 at 11:56


















10














A for loop is possible, and very simple.



for i in file_1..15000.pdb; do cat $i >> file_all.pdb; done


The downside is that you invoke cat a hell of a lot of times. But if you can't remember exactly how to do the stuff with find and the invocation overhead isn't too bad in your situation, then it's worth keeping in mind.






share|improve this answer























  • I often add a echo $i; in the loop body as a "progress indicator"

    – Rolf
    Mar 6 '18 at 7:31


















3














seq 1 15000 | awk 'print "file_"$0".dat"' | xargs cat > file_all.pdb





share|improve this answer


















  • 1





    awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

    – Stéphane Chazelas
    Feb 27 '18 at 9:31












  • Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

    – LarryC
    Feb 28 '18 at 17:53



















2














Premise



You shouldn't incur in that error for only 15k files with that specific name format [1,2].



If you are running that expansion from another directory and you have to add the path to each file, the size of your command will be bigger, and of course it can occur.



Solution run the command from that directory.



(cd That/Directory ; cat file_1..2000.pdb >> file_all.pdb )


Best Solution If instead I guessed bad and you run it from the directory in which the files are...

IMHO the best solution is the Stéphane Chazelas' ones:



seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


with printf or seq; tested on 15k files with only their number inside pre-cached it is even the faster one (at present and except the OP one from the same directory in which the files are).



Some words more



You should be able to pass to your shell command lines more long.

Your command line is 213914 characters long and contains 15003 words
cat file_1..15000.pdb " > file_all.pdb" | wc



...even adding 8 bytes for each word is 333 938 bytes (0.3M) far below from the 2097142 (2.1M) reported by ARG_MAX on a kernel 3.13.0 or the slightly smaller 2088232 reported as "Maximum length of command we could actually use" by xargs --show-limits



Give it a look on your system to the output of



getconf ARG_MAX
xargs --show-limits


Laziness guided solution



In cases like this I prefer to work with blocks even because usually come out a time efficient solution.

The logic (if any) is I'm far too lazy to write 1...1000 1001..2000 etc etc...

So I ask a script to do it for me.

Only after I've checked the output is correctness I redirect it to a script.



... but Laziness is a state of mind.

Since I'm allergic to xargs (I really should have used xargs here) and I do not want to check how to use it, I punctually finish to reinvent the wheel as in the examples below (tl;dr).



Note that since the file names are controlled (no spaces, newlines...) you can go easily with something like the script below.



tl;dr



Version 1: pass as optional parameter the 1st file number, the last, the block size, the output file



#!/bin/bash
StartN=$1:-1 # First file number
EndN=$2:-15000 # Last file number
BlockN=$3:-100 # files in a Block
OutFile=$4:-"all.pdb" # Output file name

CurrentStart=$StartN
for i in $(seq $StartN $BlockN $EndN)
do
CurrentEnd=$i ;
cat $(seq -f file_%.17g.pdb $CurrentStart $CurrentEnd) >> $OutFile;
CurrentStart=$(( CurrentEnd + 1 ))
done
# Here you may need to do a last iteration for the part cut from seq
[[ $EndN -ge $CurrentStart ]] &&
cat $(seq -f file_%.17g.pdb $CurrentStart $EndN) >> $OutFile;


Version 2



Calling bash for the expansion (a bit slower in my tests ~20%).



#!/bin/bash
StartN=$1:-1 # First file number
EndN=$2:-15000 # Last file number
BlockN=$3:-100 # files in a Block
OutFile=$4:-"all.pdb" # Output file name

CurrentStart=$StartN
for i in $(seq $StartN $BlockN $EndN)
do
CurrentEnd=$i ;
echo cat file_$CurrentStart..$CurrentEnd.pdb | /bin/bash >> $OutFile;
CurrentStart=$(( CurrentEnd + 1 ))
done
# Here you may need to do a last iteration for the part cut from seq
[[ $EndN -ge $CurrentStart ]] &&
echo cat file_$CurrentStart..$EndN.pdb | /bin/bash >> $OutFile;


Of course you can go forward and get completely rid of seq [3] (from coreutils) and work directly with the variables in bash, or use python, or compile a c program to do it [4]...






share|improve this answer

























  • Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

    – Stéphane Chazelas
    Feb 27 '18 at 11:15











  • Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

    – Stéphane Chazelas
    Feb 27 '18 at 11:16











  • seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

    – Stéphane Chazelas
    Feb 27 '18 at 11:26











  • @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

    – Hastur
    Feb 27 '18 at 11:28











  • @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

    – Hastur
    Feb 27 '18 at 11:31



















0














Another way to do it could be



(cat file_1..499.pdb; cat file_500..999.pdb; cat file_1000..1499.pdb; cat file_1500..2000.pdb) >> file_all.pdb





share|improve this answer























    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "106"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f426748%2fcat-a-very-large-number-of-files-together-in-correct-order%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    6 Answers
    6






    active

    oldest

    votes








    6 Answers
    6






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    47














    Using find, sort and xargs:



    find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
    sort -zV |
    xargs -0 cat >all.pdb


    The find command finds all relevant files, then prints their pathnames out to sort that does a "version sort" to get them in the right order (if the numbers in the filenames had been zero-filled to a fixed width we would not have needed -V). xargs takes this list of sorted pathnames and runs cat on these in as large batches as possible.



    This should work even if the filenames contains strange characters such as newlines and spaces. We use -print0 with find to give sort nul-terminated names to sort, and sort handles these using -z. xargs too reads nul-terminated names with its -0 flag.



    Note that I'm writing the result to a file whose name does not match the pattern file_*.pdb.




    The above solution uses some non-standard flags for some utilities. These are supported by the GNU implementation of these utilities and at least by the OpenBSD and the macOS implementation.



    The non-standard flags used are




    • -maxdepth 1, to make find only enter the top-most directory but no subdirectories. POSIXly, use find . ! -name . -prune ...


    • -print0, to make find output nul-terminated pathnames (this was considered by POSIX but rejected). One could use -exec printf '%s' + instead.


    • -z, to make sort take nul-terminated records. There is no POSIX equivalence.


    • -V, to make sort sort e.g. 200 after 3. There is no POSIX equivalence, but could be replaced by a numeric sort on specific parts of the filename if the filenames have a fixed prefix.


    • -0, to make xargs read nul-terminated records. There is no POSIX equivalence. POSIXly, one would need to quote the file names in a format recognised by xargs.

    If the pathnames are well behaved, and if the directory structure is flat (no subdirectories), then one could make do without these flags, except for -V with sort.






    share|improve this answer




















    • 1





      You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

      – Kevin
      Feb 27 '18 at 0:52






    • 6





      You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

      – kojiro
      Feb 27 '18 at 3:48






    • 4





      @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

      – msouth
      Feb 27 '18 at 6:30






    • 1





      @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

      – Kusalananda
      Feb 27 '18 at 7:14







    • 1





      It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

      – Scott
      Feb 28 '18 at 8:32















    47














    Using find, sort and xargs:



    find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
    sort -zV |
    xargs -0 cat >all.pdb


    The find command finds all relevant files, then prints their pathnames out to sort that does a "version sort" to get them in the right order (if the numbers in the filenames had been zero-filled to a fixed width we would not have needed -V). xargs takes this list of sorted pathnames and runs cat on these in as large batches as possible.



    This should work even if the filenames contains strange characters such as newlines and spaces. We use -print0 with find to give sort nul-terminated names to sort, and sort handles these using -z. xargs too reads nul-terminated names with its -0 flag.



    Note that I'm writing the result to a file whose name does not match the pattern file_*.pdb.




    The above solution uses some non-standard flags for some utilities. These are supported by the GNU implementation of these utilities and at least by the OpenBSD and the macOS implementation.



    The non-standard flags used are




    • -maxdepth 1, to make find only enter the top-most directory but no subdirectories. POSIXly, use find . ! -name . -prune ...


    • -print0, to make find output nul-terminated pathnames (this was considered by POSIX but rejected). One could use -exec printf '%s' + instead.


    • -z, to make sort take nul-terminated records. There is no POSIX equivalence.


    • -V, to make sort sort e.g. 200 after 3. There is no POSIX equivalence, but could be replaced by a numeric sort on specific parts of the filename if the filenames have a fixed prefix.


    • -0, to make xargs read nul-terminated records. There is no POSIX equivalence. POSIXly, one would need to quote the file names in a format recognised by xargs.

    If the pathnames are well behaved, and if the directory structure is flat (no subdirectories), then one could make do without these flags, except for -V with sort.






    share|improve this answer




















    • 1





      You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

      – Kevin
      Feb 27 '18 at 0:52






    • 6





      You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

      – kojiro
      Feb 27 '18 at 3:48






    • 4





      @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

      – msouth
      Feb 27 '18 at 6:30






    • 1





      @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

      – Kusalananda
      Feb 27 '18 at 7:14







    • 1





      It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

      – Scott
      Feb 28 '18 at 8:32













    47












    47








    47







    Using find, sort and xargs:



    find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
    sort -zV |
    xargs -0 cat >all.pdb


    The find command finds all relevant files, then prints their pathnames out to sort that does a "version sort" to get them in the right order (if the numbers in the filenames had been zero-filled to a fixed width we would not have needed -V). xargs takes this list of sorted pathnames and runs cat on these in as large batches as possible.



    This should work even if the filenames contains strange characters such as newlines and spaces. We use -print0 with find to give sort nul-terminated names to sort, and sort handles these using -z. xargs too reads nul-terminated names with its -0 flag.



    Note that I'm writing the result to a file whose name does not match the pattern file_*.pdb.




    The above solution uses some non-standard flags for some utilities. These are supported by the GNU implementation of these utilities and at least by the OpenBSD and the macOS implementation.



    The non-standard flags used are




    • -maxdepth 1, to make find only enter the top-most directory but no subdirectories. POSIXly, use find . ! -name . -prune ...


    • -print0, to make find output nul-terminated pathnames (this was considered by POSIX but rejected). One could use -exec printf '%s' + instead.


    • -z, to make sort take nul-terminated records. There is no POSIX equivalence.


    • -V, to make sort sort e.g. 200 after 3. There is no POSIX equivalence, but could be replaced by a numeric sort on specific parts of the filename if the filenames have a fixed prefix.


    • -0, to make xargs read nul-terminated records. There is no POSIX equivalence. POSIXly, one would need to quote the file names in a format recognised by xargs.

    If the pathnames are well behaved, and if the directory structure is flat (no subdirectories), then one could make do without these flags, except for -V with sort.






    share|improve this answer















    Using find, sort and xargs:



    find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
    sort -zV |
    xargs -0 cat >all.pdb


    The find command finds all relevant files, then prints their pathnames out to sort that does a "version sort" to get them in the right order (if the numbers in the filenames had been zero-filled to a fixed width we would not have needed -V). xargs takes this list of sorted pathnames and runs cat on these in as large batches as possible.



    This should work even if the filenames contains strange characters such as newlines and spaces. We use -print0 with find to give sort nul-terminated names to sort, and sort handles these using -z. xargs too reads nul-terminated names with its -0 flag.



    Note that I'm writing the result to a file whose name does not match the pattern file_*.pdb.




    The above solution uses some non-standard flags for some utilities. These are supported by the GNU implementation of these utilities and at least by the OpenBSD and the macOS implementation.



    The non-standard flags used are




    • -maxdepth 1, to make find only enter the top-most directory but no subdirectories. POSIXly, use find . ! -name . -prune ...


    • -print0, to make find output nul-terminated pathnames (this was considered by POSIX but rejected). One could use -exec printf '%s' + instead.


    • -z, to make sort take nul-terminated records. There is no POSIX equivalence.


    • -V, to make sort sort e.g. 200 after 3. There is no POSIX equivalence, but could be replaced by a numeric sort on specific parts of the filename if the filenames have a fixed prefix.


    • -0, to make xargs read nul-terminated records. There is no POSIX equivalence. POSIXly, one would need to quote the file names in a format recognised by xargs.

    If the pathnames are well behaved, and if the directory structure is flat (no subdirectories), then one could make do without these flags, except for -V with sort.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Apr 4 at 21:22

























    answered Feb 26 '18 at 17:33









    KusalanandaKusalananda

    140k17261435




    140k17261435







    • 1





      You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

      – Kevin
      Feb 27 '18 at 0:52






    • 6





      You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

      – kojiro
      Feb 27 '18 at 3:48






    • 4





      @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

      – msouth
      Feb 27 '18 at 6:30






    • 1





      @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

      – Kusalananda
      Feb 27 '18 at 7:14







    • 1





      It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

      – Scott
      Feb 28 '18 at 8:32












    • 1





      You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

      – Kevin
      Feb 27 '18 at 0:52






    • 6





      You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

      – kojiro
      Feb 27 '18 at 3:48






    • 4





      @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

      – msouth
      Feb 27 '18 at 6:30






    • 1





      @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

      – Kusalananda
      Feb 27 '18 at 7:14







    • 1





      It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

      – Scott
      Feb 28 '18 at 8:32







    1




    1





    You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

    – Kevin
    Feb 27 '18 at 0:52





    You don't need nonstandard null termination for this. These filenames are exceedingly boring and the POSIX tools are entirely capable of handling then.

    – Kevin
    Feb 27 '18 at 0:52




    6




    6





    You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

    – kojiro
    Feb 27 '18 at 3:48





    You could also write this more succinctly with the asker’s specification as printf ‘file_%d.pdb’ 1..15000 | xargs -0 cat, or even with Kevin’s point, echo file_1..15000.pdb | xargs cat. The find solution has considerably more overhead since it has to search the file system for those files, but it is more useful when some of the files may not exist.

    – kojiro
    Feb 27 '18 at 3:48




    4




    4





    @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

    – msouth
    Feb 27 '18 at 6:30





    @Kevin while what you are saying is true, it's arguably better to have an answer that applies in more general circumstances. Of the next thousand people that have this question, it's likely that some of them will have spaces or whatever in their file names.

    – msouth
    Feb 27 '18 at 6:30




    1




    1





    @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

    – Kusalananda
    Feb 27 '18 at 7:14






    @chrylis A redirection is never part of a command's arguments, and it's xargs rather than cat that is redirected (each cat invocation will use xargs standard output). If we had said xargs -0 sh -c 'cat >all.pdb' then it would have made sense to use >> instead of >, if that's what you're hinting at.

    – Kusalananda
    Feb 27 '18 at 7:14





    1




    1





    It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

    – Scott
    Feb 28 '18 at 8:32





    It looks like sort -n -k1.6 would work (for the original, file_nnn filenames, or sort -n -k1.5 for the ones without the underscore).

    – Scott
    Feb 28 '18 at 8:32













    14














    With zsh (where that 1..15000 operator comes from):



    autoload zargs # best in ~/.zshrc
    zargs file_1..15000.pdb -- cat > file_all.pdb


    Or for all file_<digits>.pdb files in numerical order:



    zargs file_<->.pdb(n) -- cat > file_all.pdb


    (where <x-y> is a glob operator that matches on decimal numbers x to y. With no x nor y, it's any decimal number. Equivalent to extendedglob's [0-9]## or kshglob's +([0-9]) (one or more digits)).



    With ksh93, using its builtin cat command (so not affected by that limit of the execve() system call since there's no execution):



    command /opt/ast/bin/cat file_1..15000.pdb > file_all.pdb


    With bash/zsh/ksh93 (which support zsh's x..y and have printf builtin):



    printf '%sn' file_1..15000.pdb | xargs cat > file_all.pdb


    On a GNU system or compatible, you could also use seq:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    For the xargs-based solutions, special care would have to be taken for file names that contain blanks, single or double quotes or backslashes.



    Like for -It's a trickier filename - 12.pdb, use:



    seq -f ""./-It's a trickier filename - %.17g.pdb"" 15000 |
    xargs cat > file_all.pdb





    share|improve this answer

























    • The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

      – Hastur
      Feb 27 '18 at 11:38












    • Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

      – Hastur
      Feb 27 '18 at 11:41












    • @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

      – Stéphane Chazelas
      Feb 27 '18 at 11:56















    14














    With zsh (where that 1..15000 operator comes from):



    autoload zargs # best in ~/.zshrc
    zargs file_1..15000.pdb -- cat > file_all.pdb


    Or for all file_<digits>.pdb files in numerical order:



    zargs file_<->.pdb(n) -- cat > file_all.pdb


    (where <x-y> is a glob operator that matches on decimal numbers x to y. With no x nor y, it's any decimal number. Equivalent to extendedglob's [0-9]## or kshglob's +([0-9]) (one or more digits)).



    With ksh93, using its builtin cat command (so not affected by that limit of the execve() system call since there's no execution):



    command /opt/ast/bin/cat file_1..15000.pdb > file_all.pdb


    With bash/zsh/ksh93 (which support zsh's x..y and have printf builtin):



    printf '%sn' file_1..15000.pdb | xargs cat > file_all.pdb


    On a GNU system or compatible, you could also use seq:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    For the xargs-based solutions, special care would have to be taken for file names that contain blanks, single or double quotes or backslashes.



    Like for -It's a trickier filename - 12.pdb, use:



    seq -f ""./-It's a trickier filename - %.17g.pdb"" 15000 |
    xargs cat > file_all.pdb





    share|improve this answer

























    • The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

      – Hastur
      Feb 27 '18 at 11:38












    • Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

      – Hastur
      Feb 27 '18 at 11:41












    • @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

      – Stéphane Chazelas
      Feb 27 '18 at 11:56













    14












    14








    14







    With zsh (where that 1..15000 operator comes from):



    autoload zargs # best in ~/.zshrc
    zargs file_1..15000.pdb -- cat > file_all.pdb


    Or for all file_<digits>.pdb files in numerical order:



    zargs file_<->.pdb(n) -- cat > file_all.pdb


    (where <x-y> is a glob operator that matches on decimal numbers x to y. With no x nor y, it's any decimal number. Equivalent to extendedglob's [0-9]## or kshglob's +([0-9]) (one or more digits)).



    With ksh93, using its builtin cat command (so not affected by that limit of the execve() system call since there's no execution):



    command /opt/ast/bin/cat file_1..15000.pdb > file_all.pdb


    With bash/zsh/ksh93 (which support zsh's x..y and have printf builtin):



    printf '%sn' file_1..15000.pdb | xargs cat > file_all.pdb


    On a GNU system or compatible, you could also use seq:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    For the xargs-based solutions, special care would have to be taken for file names that contain blanks, single or double quotes or backslashes.



    Like for -It's a trickier filename - 12.pdb, use:



    seq -f ""./-It's a trickier filename - %.17g.pdb"" 15000 |
    xargs cat > file_all.pdb





    share|improve this answer















    With zsh (where that 1..15000 operator comes from):



    autoload zargs # best in ~/.zshrc
    zargs file_1..15000.pdb -- cat > file_all.pdb


    Or for all file_<digits>.pdb files in numerical order:



    zargs file_<->.pdb(n) -- cat > file_all.pdb


    (where <x-y> is a glob operator that matches on decimal numbers x to y. With no x nor y, it's any decimal number. Equivalent to extendedglob's [0-9]## or kshglob's +([0-9]) (one or more digits)).



    With ksh93, using its builtin cat command (so not affected by that limit of the execve() system call since there's no execution):



    command /opt/ast/bin/cat file_1..15000.pdb > file_all.pdb


    With bash/zsh/ksh93 (which support zsh's x..y and have printf builtin):



    printf '%sn' file_1..15000.pdb | xargs cat > file_all.pdb


    On a GNU system or compatible, you could also use seq:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    For the xargs-based solutions, special care would have to be taken for file names that contain blanks, single or double quotes or backslashes.



    Like for -It's a trickier filename - 12.pdb, use:



    seq -f ""./-It's a trickier filename - %.17g.pdb"" 15000 |
    xargs cat > file_all.pdb






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Feb 27 '18 at 11:55

























    answered Feb 26 '18 at 17:52









    Stéphane ChazelasStéphane Chazelas

    313k57593949




    313k57593949












    • The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

      – Hastur
      Feb 27 '18 at 11:38












    • Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

      – Hastur
      Feb 27 '18 at 11:41












    • @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

      – Stéphane Chazelas
      Feb 27 '18 at 11:56

















    • The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

      – Hastur
      Feb 27 '18 at 11:38












    • Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

      – Hastur
      Feb 27 '18 at 11:41












    • @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

      – Stéphane Chazelas
      Feb 27 '18 at 11:56
















    The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

    – Hastur
    Feb 27 '18 at 11:38






    The seq -f | xarg cat > is the most elegant, and effective solution. (IMHO).

    – Hastur
    Feb 27 '18 at 11:38














    Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

    – Hastur
    Feb 27 '18 at 11:41






    Check the trickier filename... maybe '"./-It'''s a trickier filename - %.17g.pdb"' ?

    – Hastur
    Feb 27 '18 at 11:41














    @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

    – Stéphane Chazelas
    Feb 27 '18 at 11:56





    @Hastur, oops! Yes, thanks, I've changed it to an alternative quoting syntax. Yours would work as well.

    – Stéphane Chazelas
    Feb 27 '18 at 11:56











    10














    A for loop is possible, and very simple.



    for i in file_1..15000.pdb; do cat $i >> file_all.pdb; done


    The downside is that you invoke cat a hell of a lot of times. But if you can't remember exactly how to do the stuff with find and the invocation overhead isn't too bad in your situation, then it's worth keeping in mind.






    share|improve this answer























    • I often add a echo $i; in the loop body as a "progress indicator"

      – Rolf
      Mar 6 '18 at 7:31















    10














    A for loop is possible, and very simple.



    for i in file_1..15000.pdb; do cat $i >> file_all.pdb; done


    The downside is that you invoke cat a hell of a lot of times. But if you can't remember exactly how to do the stuff with find and the invocation overhead isn't too bad in your situation, then it's worth keeping in mind.






    share|improve this answer























    • I often add a echo $i; in the loop body as a "progress indicator"

      – Rolf
      Mar 6 '18 at 7:31













    10












    10








    10







    A for loop is possible, and very simple.



    for i in file_1..15000.pdb; do cat $i >> file_all.pdb; done


    The downside is that you invoke cat a hell of a lot of times. But if you can't remember exactly how to do the stuff with find and the invocation overhead isn't too bad in your situation, then it's worth keeping in mind.






    share|improve this answer













    A for loop is possible, and very simple.



    for i in file_1..15000.pdb; do cat $i >> file_all.pdb; done


    The downside is that you invoke cat a hell of a lot of times. But if you can't remember exactly how to do the stuff with find and the invocation overhead isn't too bad in your situation, then it's worth keeping in mind.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Feb 26 '18 at 18:54









    OmnipotentEntityOmnipotentEntity

    21317




    21317












    • I often add a echo $i; in the loop body as a "progress indicator"

      – Rolf
      Mar 6 '18 at 7:31

















    • I often add a echo $i; in the loop body as a "progress indicator"

      – Rolf
      Mar 6 '18 at 7:31
















    I often add a echo $i; in the loop body as a "progress indicator"

    – Rolf
    Mar 6 '18 at 7:31





    I often add a echo $i; in the loop body as a "progress indicator"

    – Rolf
    Mar 6 '18 at 7:31











    3














    seq 1 15000 | awk 'print "file_"$0".dat"' | xargs cat > file_all.pdb





    share|improve this answer


















    • 1





      awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

      – Stéphane Chazelas
      Feb 27 '18 at 9:31












    • Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

      – LarryC
      Feb 28 '18 at 17:53
















    3














    seq 1 15000 | awk 'print "file_"$0".dat"' | xargs cat > file_all.pdb





    share|improve this answer


















    • 1





      awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

      – Stéphane Chazelas
      Feb 27 '18 at 9:31












    • Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

      – LarryC
      Feb 28 '18 at 17:53














    3












    3








    3







    seq 1 15000 | awk 'print "file_"$0".dat"' | xargs cat > file_all.pdb





    share|improve this answer













    seq 1 15000 | awk 'print "file_"$0".dat"' | xargs cat > file_all.pdb






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Feb 26 '18 at 20:12









    LarryCLarryC

    312




    312







    • 1





      awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

      – Stéphane Chazelas
      Feb 27 '18 at 9:31












    • Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

      – LarryC
      Feb 28 '18 at 17:53













    • 1





      awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

      – Stéphane Chazelas
      Feb 27 '18 at 9:31












    • Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

      – LarryC
      Feb 28 '18 at 17:53








    1




    1





    awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

    – Stéphane Chazelas
    Feb 27 '18 at 9:31






    awk can do seq's job here and seq can do awk's job: seq -f file_%.10g.pdb 15000. Note that seq is not a standard command.

    – Stéphane Chazelas
    Feb 27 '18 at 9:31














    Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

    – LarryC
    Feb 28 '18 at 17:53






    Thanks Stéphane -- I think seq -f is a great way to do this; will remember that.

    – LarryC
    Feb 28 '18 at 17:53












    2














    Premise



    You shouldn't incur in that error for only 15k files with that specific name format [1,2].



    If you are running that expansion from another directory and you have to add the path to each file, the size of your command will be bigger, and of course it can occur.



    Solution run the command from that directory.



    (cd That/Directory ; cat file_1..2000.pdb >> file_all.pdb )


    Best Solution If instead I guessed bad and you run it from the directory in which the files are...

    IMHO the best solution is the Stéphane Chazelas' ones:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    with printf or seq; tested on 15k files with only their number inside pre-cached it is even the faster one (at present and except the OP one from the same directory in which the files are).



    Some words more



    You should be able to pass to your shell command lines more long.

    Your command line is 213914 characters long and contains 15003 words
    cat file_1..15000.pdb " > file_all.pdb" | wc



    ...even adding 8 bytes for each word is 333 938 bytes (0.3M) far below from the 2097142 (2.1M) reported by ARG_MAX on a kernel 3.13.0 or the slightly smaller 2088232 reported as "Maximum length of command we could actually use" by xargs --show-limits



    Give it a look on your system to the output of



    getconf ARG_MAX
    xargs --show-limits


    Laziness guided solution



    In cases like this I prefer to work with blocks even because usually come out a time efficient solution.

    The logic (if any) is I'm far too lazy to write 1...1000 1001..2000 etc etc...

    So I ask a script to do it for me.

    Only after I've checked the output is correctness I redirect it to a script.



    ... but Laziness is a state of mind.

    Since I'm allergic to xargs (I really should have used xargs here) and I do not want to check how to use it, I punctually finish to reinvent the wheel as in the examples below (tl;dr).



    Note that since the file names are controlled (no spaces, newlines...) you can go easily with something like the script below.



    tl;dr



    Version 1: pass as optional parameter the 1st file number, the last, the block size, the output file



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    cat $(seq -f file_%.17g.pdb $CurrentStart $CurrentEnd) >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    cat $(seq -f file_%.17g.pdb $CurrentStart $EndN) >> $OutFile;


    Version 2



    Calling bash for the expansion (a bit slower in my tests ~20%).



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    echo cat file_$CurrentStart..$CurrentEnd.pdb | /bin/bash >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    echo cat file_$CurrentStart..$EndN.pdb | /bin/bash >> $OutFile;


    Of course you can go forward and get completely rid of seq [3] (from coreutils) and work directly with the variables in bash, or use python, or compile a c program to do it [4]...






    share|improve this answer

























    • Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

      – Stéphane Chazelas
      Feb 27 '18 at 11:15











    • Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

      – Stéphane Chazelas
      Feb 27 '18 at 11:16











    • seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

      – Stéphane Chazelas
      Feb 27 '18 at 11:26











    • @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

      – Hastur
      Feb 27 '18 at 11:28











    • @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

      – Hastur
      Feb 27 '18 at 11:31
















    2














    Premise



    You shouldn't incur in that error for only 15k files with that specific name format [1,2].



    If you are running that expansion from another directory and you have to add the path to each file, the size of your command will be bigger, and of course it can occur.



    Solution run the command from that directory.



    (cd That/Directory ; cat file_1..2000.pdb >> file_all.pdb )


    Best Solution If instead I guessed bad and you run it from the directory in which the files are...

    IMHO the best solution is the Stéphane Chazelas' ones:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    with printf or seq; tested on 15k files with only their number inside pre-cached it is even the faster one (at present and except the OP one from the same directory in which the files are).



    Some words more



    You should be able to pass to your shell command lines more long.

    Your command line is 213914 characters long and contains 15003 words
    cat file_1..15000.pdb " > file_all.pdb" | wc



    ...even adding 8 bytes for each word is 333 938 bytes (0.3M) far below from the 2097142 (2.1M) reported by ARG_MAX on a kernel 3.13.0 or the slightly smaller 2088232 reported as "Maximum length of command we could actually use" by xargs --show-limits



    Give it a look on your system to the output of



    getconf ARG_MAX
    xargs --show-limits


    Laziness guided solution



    In cases like this I prefer to work with blocks even because usually come out a time efficient solution.

    The logic (if any) is I'm far too lazy to write 1...1000 1001..2000 etc etc...

    So I ask a script to do it for me.

    Only after I've checked the output is correctness I redirect it to a script.



    ... but Laziness is a state of mind.

    Since I'm allergic to xargs (I really should have used xargs here) and I do not want to check how to use it, I punctually finish to reinvent the wheel as in the examples below (tl;dr).



    Note that since the file names are controlled (no spaces, newlines...) you can go easily with something like the script below.



    tl;dr



    Version 1: pass as optional parameter the 1st file number, the last, the block size, the output file



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    cat $(seq -f file_%.17g.pdb $CurrentStart $CurrentEnd) >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    cat $(seq -f file_%.17g.pdb $CurrentStart $EndN) >> $OutFile;


    Version 2



    Calling bash for the expansion (a bit slower in my tests ~20%).



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    echo cat file_$CurrentStart..$CurrentEnd.pdb | /bin/bash >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    echo cat file_$CurrentStart..$EndN.pdb | /bin/bash >> $OutFile;


    Of course you can go forward and get completely rid of seq [3] (from coreutils) and work directly with the variables in bash, or use python, or compile a c program to do it [4]...






    share|improve this answer

























    • Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

      – Stéphane Chazelas
      Feb 27 '18 at 11:15











    • Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

      – Stéphane Chazelas
      Feb 27 '18 at 11:16











    • seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

      – Stéphane Chazelas
      Feb 27 '18 at 11:26











    • @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

      – Hastur
      Feb 27 '18 at 11:28











    • @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

      – Hastur
      Feb 27 '18 at 11:31














    2












    2








    2







    Premise



    You shouldn't incur in that error for only 15k files with that specific name format [1,2].



    If you are running that expansion from another directory and you have to add the path to each file, the size of your command will be bigger, and of course it can occur.



    Solution run the command from that directory.



    (cd That/Directory ; cat file_1..2000.pdb >> file_all.pdb )


    Best Solution If instead I guessed bad and you run it from the directory in which the files are...

    IMHO the best solution is the Stéphane Chazelas' ones:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    with printf or seq; tested on 15k files with only their number inside pre-cached it is even the faster one (at present and except the OP one from the same directory in which the files are).



    Some words more



    You should be able to pass to your shell command lines more long.

    Your command line is 213914 characters long and contains 15003 words
    cat file_1..15000.pdb " > file_all.pdb" | wc



    ...even adding 8 bytes for each word is 333 938 bytes (0.3M) far below from the 2097142 (2.1M) reported by ARG_MAX on a kernel 3.13.0 or the slightly smaller 2088232 reported as "Maximum length of command we could actually use" by xargs --show-limits



    Give it a look on your system to the output of



    getconf ARG_MAX
    xargs --show-limits


    Laziness guided solution



    In cases like this I prefer to work with blocks even because usually come out a time efficient solution.

    The logic (if any) is I'm far too lazy to write 1...1000 1001..2000 etc etc...

    So I ask a script to do it for me.

    Only after I've checked the output is correctness I redirect it to a script.



    ... but Laziness is a state of mind.

    Since I'm allergic to xargs (I really should have used xargs here) and I do not want to check how to use it, I punctually finish to reinvent the wheel as in the examples below (tl;dr).



    Note that since the file names are controlled (no spaces, newlines...) you can go easily with something like the script below.



    tl;dr



    Version 1: pass as optional parameter the 1st file number, the last, the block size, the output file



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    cat $(seq -f file_%.17g.pdb $CurrentStart $CurrentEnd) >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    cat $(seq -f file_%.17g.pdb $CurrentStart $EndN) >> $OutFile;


    Version 2



    Calling bash for the expansion (a bit slower in my tests ~20%).



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    echo cat file_$CurrentStart..$CurrentEnd.pdb | /bin/bash >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    echo cat file_$CurrentStart..$EndN.pdb | /bin/bash >> $OutFile;


    Of course you can go forward and get completely rid of seq [3] (from coreutils) and work directly with the variables in bash, or use python, or compile a c program to do it [4]...






    share|improve this answer















    Premise



    You shouldn't incur in that error for only 15k files with that specific name format [1,2].



    If you are running that expansion from another directory and you have to add the path to each file, the size of your command will be bigger, and of course it can occur.



    Solution run the command from that directory.



    (cd That/Directory ; cat file_1..2000.pdb >> file_all.pdb )


    Best Solution If instead I guessed bad and you run it from the directory in which the files are...

    IMHO the best solution is the Stéphane Chazelas' ones:



    seq -f 'file_%.17g.pdb' 15000 | xargs cat > file_all.pdb


    with printf or seq; tested on 15k files with only their number inside pre-cached it is even the faster one (at present and except the OP one from the same directory in which the files are).



    Some words more



    You should be able to pass to your shell command lines more long.

    Your command line is 213914 characters long and contains 15003 words
    cat file_1..15000.pdb " > file_all.pdb" | wc



    ...even adding 8 bytes for each word is 333 938 bytes (0.3M) far below from the 2097142 (2.1M) reported by ARG_MAX on a kernel 3.13.0 or the slightly smaller 2088232 reported as "Maximum length of command we could actually use" by xargs --show-limits



    Give it a look on your system to the output of



    getconf ARG_MAX
    xargs --show-limits


    Laziness guided solution



    In cases like this I prefer to work with blocks even because usually come out a time efficient solution.

    The logic (if any) is I'm far too lazy to write 1...1000 1001..2000 etc etc...

    So I ask a script to do it for me.

    Only after I've checked the output is correctness I redirect it to a script.



    ... but Laziness is a state of mind.

    Since I'm allergic to xargs (I really should have used xargs here) and I do not want to check how to use it, I punctually finish to reinvent the wheel as in the examples below (tl;dr).



    Note that since the file names are controlled (no spaces, newlines...) you can go easily with something like the script below.



    tl;dr



    Version 1: pass as optional parameter the 1st file number, the last, the block size, the output file



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    cat $(seq -f file_%.17g.pdb $CurrentStart $CurrentEnd) >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    cat $(seq -f file_%.17g.pdb $CurrentStart $EndN) >> $OutFile;


    Version 2



    Calling bash for the expansion (a bit slower in my tests ~20%).



    #!/bin/bash
    StartN=$1:-1 # First file number
    EndN=$2:-15000 # Last file number
    BlockN=$3:-100 # files in a Block
    OutFile=$4:-"all.pdb" # Output file name

    CurrentStart=$StartN
    for i in $(seq $StartN $BlockN $EndN)
    do
    CurrentEnd=$i ;
    echo cat file_$CurrentStart..$CurrentEnd.pdb | /bin/bash >> $OutFile;
    CurrentStart=$(( CurrentEnd + 1 ))
    done
    # Here you may need to do a last iteration for the part cut from seq
    [[ $EndN -ge $CurrentStart ]] &&
    echo cat file_$CurrentStart..$EndN.pdb | /bin/bash >> $OutFile;


    Of course you can go forward and get completely rid of seq [3] (from coreutils) and work directly with the variables in bash, or use python, or compile a c program to do it [4]...







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Feb 27 '18 at 13:11

























    answered Feb 27 '18 at 11:08









    HasturHastur

    1,8481022




    1,8481022












    • Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

      – Stéphane Chazelas
      Feb 27 '18 at 11:15











    • Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

      – Stéphane Chazelas
      Feb 27 '18 at 11:16











    • seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

      – Stéphane Chazelas
      Feb 27 '18 at 11:26











    • @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

      – Hastur
      Feb 27 '18 at 11:28











    • @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

      – Hastur
      Feb 27 '18 at 11:31


















    • Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

      – Stéphane Chazelas
      Feb 27 '18 at 11:15











    • Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

      – Stéphane Chazelas
      Feb 27 '18 at 11:16











    • seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

      – Stéphane Chazelas
      Feb 27 '18 at 11:26











    • @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

      – Hastur
      Feb 27 '18 at 11:28











    • @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

      – Hastur
      Feb 27 '18 at 11:31

















    Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

    – Stéphane Chazelas
    Feb 27 '18 at 11:15





    Note that %g is short for %.6g. It would represent 1,000,000 as 1e+06 for instance.

    – Stéphane Chazelas
    Feb 27 '18 at 11:15













    Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

    – Stéphane Chazelas
    Feb 27 '18 at 11:16





    Really lazy people use the tools designed for the task of working around that E2BIG limitation like xargs, zsh's zargs or ksh93's command -x.

    – Stéphane Chazelas
    Feb 27 '18 at 11:16













    seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

    – Stéphane Chazelas
    Feb 27 '18 at 11:26





    seq is not a bash builtin, it's a command from GNU coreutils. seq -f %g 1000000 1000000 outputs 1e+06 even in the latest version of coreutils.

    – Stéphane Chazelas
    Feb 27 '18 at 11:26













    @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

    – Hastur
    Feb 27 '18 at 11:28





    @StéphaneChazelas Laziness is a state of mind. Strange to say but I feel more cosy when I can see (and visually check the output of a serialized command) and only then redirect to the execution. That construction give me to think less than xarg... but I understand it is personal and maybe related only to me.

    – Hastur
    Feb 27 '18 at 11:28













    @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

    – Hastur
    Feb 27 '18 at 11:31






    @StéphaneChazelas Gotcha, right... Fixed. Thanks. I tested only with the 15k files given by the OP, my bad.

    – Hastur
    Feb 27 '18 at 11:31












    0














    Another way to do it could be



    (cat file_1..499.pdb; cat file_500..999.pdb; cat file_1000..1499.pdb; cat file_1500..2000.pdb) >> file_all.pdb





    share|improve this answer



























      0














      Another way to do it could be



      (cat file_1..499.pdb; cat file_500..999.pdb; cat file_1000..1499.pdb; cat file_1500..2000.pdb) >> file_all.pdb





      share|improve this answer

























        0












        0








        0







        Another way to do it could be



        (cat file_1..499.pdb; cat file_500..999.pdb; cat file_1000..1499.pdb; cat file_1500..2000.pdb) >> file_all.pdb





        share|improve this answer













        Another way to do it could be



        (cat file_1..499.pdb; cat file_500..999.pdb; cat file_1000..1499.pdb; cat file_1500..2000.pdb) >> file_all.pdb






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Feb 27 '18 at 14:51









        glglglglglgl

        1,174812




        1,174812



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Unix & Linux Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f426748%2fcat-a-very-large-number-of-files-together-in-correct-order%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Àrd-bhaile Cathair chruinne/Baile mòr cruinne | Artagailean ceangailte | Clàr-taice na seòladaireachd

            대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495

            Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition