File command not accepting wild card characters
On my Linux machine, I can use the file command to list the contents of a directory by using it this way:
file /home/user/*
It prints the file type for each file in the /home/user/ directory. This way, I can get to know the list of all the files in that directory.
However, on a remote Linux machine, I am not able to use the wild card character with file command.
file /home/user/*
/home/user/*: cannot open `/home/user/*' (No such file or directory)
Does file command not support wild card characters on certain versions of Linux? Or is this is a restriction?
Thanks.
linux
|
show 1 more comment
On my Linux machine, I can use the file command to list the contents of a directory by using it this way:
file /home/user/*
It prints the file type for each file in the /home/user/ directory. This way, I can get to know the list of all the files in that directory.
However, on a remote Linux machine, I am not able to use the wild card character with file command.
file /home/user/*
/home/user/*: cannot open `/home/user/*' (No such file or directory)
Does file command not support wild card characters on certain versions of Linux? Or is this is a restriction?
Thanks.
linux
What shell are you using on the remote? Runecho $0
– Attie
Dec 11 at 15:32
Note thatls /home/user/will show the files in a directory without using a wildcard. You can add-lfor more information, though not of course whatfileshows.
– AFH
Dec 11 at 15:40
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
1
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55
|
show 1 more comment
On my Linux machine, I can use the file command to list the contents of a directory by using it this way:
file /home/user/*
It prints the file type for each file in the /home/user/ directory. This way, I can get to know the list of all the files in that directory.
However, on a remote Linux machine, I am not able to use the wild card character with file command.
file /home/user/*
/home/user/*: cannot open `/home/user/*' (No such file or directory)
Does file command not support wild card characters on certain versions of Linux? Or is this is a restriction?
Thanks.
linux
On my Linux machine, I can use the file command to list the contents of a directory by using it this way:
file /home/user/*
It prints the file type for each file in the /home/user/ directory. This way, I can get to know the list of all the files in that directory.
However, on a remote Linux machine, I am not able to use the wild card character with file command.
file /home/user/*
/home/user/*: cannot open `/home/user/*' (No such file or directory)
Does file command not support wild card characters on certain versions of Linux? Or is this is a restriction?
Thanks.
linux
linux
asked Dec 11 at 15:27
Neon Flash
1306
1306
What shell are you using on the remote? Runecho $0
– Attie
Dec 11 at 15:32
Note thatls /home/user/will show the files in a directory without using a wildcard. You can add-lfor more information, though not of course whatfileshows.
– AFH
Dec 11 at 15:40
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
1
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55
|
show 1 more comment
What shell are you using on the remote? Runecho $0
– Attie
Dec 11 at 15:32
Note thatls /home/user/will show the files in a directory without using a wildcard. You can add-lfor more information, though not of course whatfileshows.
– AFH
Dec 11 at 15:40
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
1
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55
What shell are you using on the remote? Run
echo $0– Attie
Dec 11 at 15:32
What shell are you using on the remote? Run
echo $0– Attie
Dec 11 at 15:32
Note that
ls /home/user/ will show the files in a directory without using a wildcard. You can add -l for more information, though not of course what file shows.– AFH
Dec 11 at 15:40
Note that
ls /home/user/ will show the files in a directory without using a wildcard. You can add -l for more information, though not of course what file shows.– AFH
Dec 11 at 15:40
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
1
1
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55
|
show 1 more comment
1 Answer
1
active
oldest
votes
The file utility doesn't handle wildcards, the shell does...
The shell is likely bash or dash or sh, or something similar - you can run echo $0 at a prompt to see what's running.
As mentioned above, the wildcards are handled by the shell (not the application), and the expansion's default behaviour might be a little unexpected. Bash, for example, will use the following behaviour:
- If
/home/usereither doesn't exist, or has nothing in it, then/home/user/*will not expand, but will remain as-is (i.e:/home/user/*). - If
/home/useris a directory with two filesaandbin it, then/home/user/*will expand to/home/user/a /home/user/b.
With bash, you can:
- Disable "globbing" entirely by running
set -f, or - Expand a "glob" to nothing if it doesn't match anything by running
shopt -s nullglob.
This means that either:
- The remote shell doesn't support globbing at all
- The remote shell has globbing disabled by default (try running
set +fto enable it)
If your end goal really is to "run find on all entities in /home/user/", then you could try the following:
find /home/user/ -maxdepth 1 -type f -print0
| xargs -0 file
-maxdepth 1prevents recursion
-type fshows only files (not directories, symlinks, etc...)
find's-print0andxargs'-0arguments are used together to use a NUL character () to separate entries, as special characters line newline (n) are valid in filenames.
xargswill use records provided viastdin, and use them as additional parameters to the specified command (filein this case)
Default (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
No Globbing (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Null Glob Expansion (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
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: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1382669%2ffile-command-not-accepting-wild-card-characters%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The file utility doesn't handle wildcards, the shell does...
The shell is likely bash or dash or sh, or something similar - you can run echo $0 at a prompt to see what's running.
As mentioned above, the wildcards are handled by the shell (not the application), and the expansion's default behaviour might be a little unexpected. Bash, for example, will use the following behaviour:
- If
/home/usereither doesn't exist, or has nothing in it, then/home/user/*will not expand, but will remain as-is (i.e:/home/user/*). - If
/home/useris a directory with two filesaandbin it, then/home/user/*will expand to/home/user/a /home/user/b.
With bash, you can:
- Disable "globbing" entirely by running
set -f, or - Expand a "glob" to nothing if it doesn't match anything by running
shopt -s nullglob.
This means that either:
- The remote shell doesn't support globbing at all
- The remote shell has globbing disabled by default (try running
set +fto enable it)
If your end goal really is to "run find on all entities in /home/user/", then you could try the following:
find /home/user/ -maxdepth 1 -type f -print0
| xargs -0 file
-maxdepth 1prevents recursion
-type fshows only files (not directories, symlinks, etc...)
find's-print0andxargs'-0arguments are used together to use a NUL character () to separate entries, as special characters line newline (n) are valid in filenames.
xargswill use records provided viastdin, and use them as additional parameters to the specified command (filein this case)
Default (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
No Globbing (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Null Glob Expansion (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
add a comment |
The file utility doesn't handle wildcards, the shell does...
The shell is likely bash or dash or sh, or something similar - you can run echo $0 at a prompt to see what's running.
As mentioned above, the wildcards are handled by the shell (not the application), and the expansion's default behaviour might be a little unexpected. Bash, for example, will use the following behaviour:
- If
/home/usereither doesn't exist, or has nothing in it, then/home/user/*will not expand, but will remain as-is (i.e:/home/user/*). - If
/home/useris a directory with two filesaandbin it, then/home/user/*will expand to/home/user/a /home/user/b.
With bash, you can:
- Disable "globbing" entirely by running
set -f, or - Expand a "glob" to nothing if it doesn't match anything by running
shopt -s nullglob.
This means that either:
- The remote shell doesn't support globbing at all
- The remote shell has globbing disabled by default (try running
set +fto enable it)
If your end goal really is to "run find on all entities in /home/user/", then you could try the following:
find /home/user/ -maxdepth 1 -type f -print0
| xargs -0 file
-maxdepth 1prevents recursion
-type fshows only files (not directories, symlinks, etc...)
find's-print0andxargs'-0arguments are used together to use a NUL character () to separate entries, as special characters line newline (n) are valid in filenames.
xargswill use records provided viastdin, and use them as additional parameters to the specified command (filein this case)
Default (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
No Globbing (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Null Glob Expansion (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
add a comment |
The file utility doesn't handle wildcards, the shell does...
The shell is likely bash or dash or sh, or something similar - you can run echo $0 at a prompt to see what's running.
As mentioned above, the wildcards are handled by the shell (not the application), and the expansion's default behaviour might be a little unexpected. Bash, for example, will use the following behaviour:
- If
/home/usereither doesn't exist, or has nothing in it, then/home/user/*will not expand, but will remain as-is (i.e:/home/user/*). - If
/home/useris a directory with two filesaandbin it, then/home/user/*will expand to/home/user/a /home/user/b.
With bash, you can:
- Disable "globbing" entirely by running
set -f, or - Expand a "glob" to nothing if it doesn't match anything by running
shopt -s nullglob.
This means that either:
- The remote shell doesn't support globbing at all
- The remote shell has globbing disabled by default (try running
set +fto enable it)
If your end goal really is to "run find on all entities in /home/user/", then you could try the following:
find /home/user/ -maxdepth 1 -type f -print0
| xargs -0 file
-maxdepth 1prevents recursion
-type fshows only files (not directories, symlinks, etc...)
find's-print0andxargs'-0arguments are used together to use a NUL character () to separate entries, as special characters line newline (n) are valid in filenames.
xargswill use records provided viastdin, and use them as additional parameters to the specified command (filein this case)
Default (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
No Globbing (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Null Glob Expansion (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
The file utility doesn't handle wildcards, the shell does...
The shell is likely bash or dash or sh, or something similar - you can run echo $0 at a prompt to see what's running.
As mentioned above, the wildcards are handled by the shell (not the application), and the expansion's default behaviour might be a little unexpected. Bash, for example, will use the following behaviour:
- If
/home/usereither doesn't exist, or has nothing in it, then/home/user/*will not expand, but will remain as-is (i.e:/home/user/*). - If
/home/useris a directory with two filesaandbin it, then/home/user/*will expand to/home/user/a /home/user/b.
With bash, you can:
- Disable "globbing" entirely by running
set -f, or - Expand a "glob" to nothing if it doesn't match anything by running
shopt -s nullglob.
This means that either:
- The remote shell doesn't support globbing at all
- The remote shell has globbing disabled by default (try running
set +fto enable it)
If your end goal really is to "run find on all entities in /home/user/", then you could try the following:
find /home/user/ -maxdepth 1 -type f -print0
| xargs -0 file
-maxdepth 1prevents recursion
-type fshows only files (not directories, symlinks, etc...)
find's-print0andxargs'-0arguments are used together to use a NUL character () to separate entries, as special characters line newline (n) are valid in filenames.
xargswill use records provided viastdin, and use them as additional parameters to the specified command (filein this case)
Default (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
No Globbing (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Null Glob Expansion (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
edited Dec 11 at 15:49
answered Dec 11 at 15:34
Attie
10.9k32444
10.9k32444
add a comment |
add a comment |
Thanks for contributing an answer to Super User!
- 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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1382669%2ffile-command-not-accepting-wild-card-characters%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
What shell are you using on the remote? Run
echo $0– Attie
Dec 11 at 15:32
Note that
ls /home/user/will show the files in a directory without using a wildcard. You can add-lfor more information, though not of course whatfileshows.– AFH
Dec 11 at 15:40
It is running bash shell.
– Neon Flash
Dec 11 at 16:34
Yes, I can use the ls command as well. However, in this specific case I need to use file command.
– Neon Flash
Dec 11 at 16:35
1
@NeonFlash was my answer helpful?
– Attie
Dec 11 at 21:55