What is wrong with my use of “find -print0”?Why does unlink(1) support only one file?Why does ln -s...
Integer but not Laurent sequences
How to transport 10,000 terrestrial trolls across ocean fast?
Protagonist constantly has to have long words explained to her. Will this get tedious?
How can changes in personality/values of a person who turned into a vampire be explained?
Missing a connection and don't have money to book next flight
How can I handle players killing my NPC outside of combat?
Can a planet be tidally unlocked?
Reason for small-valued feedback resistors in low noise Op Amp
How can I give a Ranger advantage on a check due to Favored Enemy without spoiling the story for the player?
Piping Multiple Numbers into Sed
What does "don't have a baby" imply or mean in this sentence?
What does an unprocessed RAW file look like?
Taking an academic pseudonym?
Minimum Viable Product for RTS game?
Why does a single AND gate need 60 transistors?
What is this mysterious *green square* on my Content Editor?
Disk space full during insert, what happens?
Is Screenshot Time-tracking Common?
Multiple null checks in Java 8
Coworker asking me to not bring cakes due to self control issue. What should I do?
Why write a book when there's a movie in my head?
Does Plato's "Ring of Gyges" have a corrupting influence on its wearer?
Can someone explain European graduate programs in STEM fields?
How to deal with an underperforming subordinate?
What is wrong with my use of “find -print0”?
Why does unlink(1) support only one file?Why does ln -s accept a single argumentWhy does a '.' work in chown?Why does “touch -a” also set the ctime?Why does after move I can get sync to work but not after cp -r *?Why does 'rmdir -p --ignore-fail-on-non-empty' fail when encountering $HOME?Why do df and df -h show different value? How does df -h perform calculation?Why does GNU Core Utilities stat (including du and ls) report the following sizes (ext4 in GNU/Linux)?
I'm confused by this experiment (in Bash):
$ mkdir 'foon'
$ find . -print0 | od -c
0000000 . . / f o o n
0000012
As you can see, "find" is correctly delimiting the output with null characters, but it escapes the newline in the directory name as "foon" with a backslash "n". Why is it doing this? I told it "-print0" which says "This allows file names that contain newlines ... to be correctly interpreted by programs that process the find output." The escaping should not be necessary, since "" is the delimiter, not "n".
coreutils
add a comment |
I'm confused by this experiment (in Bash):
$ mkdir 'foon'
$ find . -print0 | od -c
0000000 . . / f o o n
0000012
As you can see, "find" is correctly delimiting the output with null characters, but it escapes the newline in the directory name as "foon" with a backslash "n". Why is it doing this? I told it "-print0" which says "This allows file names that contain newlines ... to be correctly interpreted by programs that process the find output." The escaping should not be necessary, since "" is the delimiter, not "n".
coreutils
1
You made a directory called literallyfoon
, with a backslash in its name.
– Michael Homer
1 hour ago
2
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago
add a comment |
I'm confused by this experiment (in Bash):
$ mkdir 'foon'
$ find . -print0 | od -c
0000000 . . / f o o n
0000012
As you can see, "find" is correctly delimiting the output with null characters, but it escapes the newline in the directory name as "foon" with a backslash "n". Why is it doing this? I told it "-print0" which says "This allows file names that contain newlines ... to be correctly interpreted by programs that process the find output." The escaping should not be necessary, since "" is the delimiter, not "n".
coreutils
I'm confused by this experiment (in Bash):
$ mkdir 'foon'
$ find . -print0 | od -c
0000000 . . / f o o n
0000012
As you can see, "find" is correctly delimiting the output with null characters, but it escapes the newline in the directory name as "foon" with a backslash "n". Why is it doing this? I told it "-print0" which says "This allows file names that contain newlines ... to be correctly interpreted by programs that process the find output." The escaping should not be necessary, since "" is the delimiter, not "n".
coreutils
coreutils
edited 12 mins ago
Metamorphic
asked 1 hour ago
MetamorphicMetamorphic
27819
27819
1
You made a directory called literallyfoon
, with a backslash in its name.
– Michael Homer
1 hour ago
2
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago
add a comment |
1
You made a directory called literallyfoon
, with a backslash in its name.
– Michael Homer
1 hour ago
2
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago
1
1
You made a directory called literally
foon
, with a backslash in its name.– Michael Homer
1 hour ago
You made a directory called literally
foon
, with a backslash in its name.– Michael Homer
1 hour ago
2
2
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago
add a comment |
2 Answers
2
active
oldest
votes
The problem is not in find
, but in how you're creating this directory. The single quoted string 'foon'
is actually a 5-character string, of which the last two are a backslash and a lowercase "n".
Double-quoting it doesn't help either, since double-quoted strings in shell use backslash as an escape character, but don't really interpret any of the C-style backslash sequences.
In a shell such as bash or zsh, etc. (but not dash from Debian/Ubuntu), you can use $'...'
, which interprets those sequences:
$ mkdir $'foon'
(See bash's documentation for this feature, called "ANSI C Quoting").
Another option, that should work in any shell compatible with bourne shell is to insert an actual newline:
$ mkdir 'foo
'
That's an actual Return at the end of the first line, only closing the single quote on the second line.
add a comment |
Let's make a directory named foo
plus a newline:
$ mkdir $'foon'
Now, let's use find:
$ find . -print0 | od -c
0000000 . . / f o o n
0000011
n
is not escaped.
The issue is that mkdir 'foon'
is the name is interpreted as foo
followed by followed by
n
. We can verify that with:
$ printf '%s' 'foon' | od -c
0000000 f o o n
0000005
add a comment |
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
});
}
});
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%2funix.stackexchange.com%2fquestions%2f502460%2fwhat-is-wrong-with-my-use-of-find-print0%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem is not in find
, but in how you're creating this directory. The single quoted string 'foon'
is actually a 5-character string, of which the last two are a backslash and a lowercase "n".
Double-quoting it doesn't help either, since double-quoted strings in shell use backslash as an escape character, but don't really interpret any of the C-style backslash sequences.
In a shell such as bash or zsh, etc. (but not dash from Debian/Ubuntu), you can use $'...'
, which interprets those sequences:
$ mkdir $'foon'
(See bash's documentation for this feature, called "ANSI C Quoting").
Another option, that should work in any shell compatible with bourne shell is to insert an actual newline:
$ mkdir 'foo
'
That's an actual Return at the end of the first line, only closing the single quote on the second line.
add a comment |
The problem is not in find
, but in how you're creating this directory. The single quoted string 'foon'
is actually a 5-character string, of which the last two are a backslash and a lowercase "n".
Double-quoting it doesn't help either, since double-quoted strings in shell use backslash as an escape character, but don't really interpret any of the C-style backslash sequences.
In a shell such as bash or zsh, etc. (but not dash from Debian/Ubuntu), you can use $'...'
, which interprets those sequences:
$ mkdir $'foon'
(See bash's documentation for this feature, called "ANSI C Quoting").
Another option, that should work in any shell compatible with bourne shell is to insert an actual newline:
$ mkdir 'foo
'
That's an actual Return at the end of the first line, only closing the single quote on the second line.
add a comment |
The problem is not in find
, but in how you're creating this directory. The single quoted string 'foon'
is actually a 5-character string, of which the last two are a backslash and a lowercase "n".
Double-quoting it doesn't help either, since double-quoted strings in shell use backslash as an escape character, but don't really interpret any of the C-style backslash sequences.
In a shell such as bash or zsh, etc. (but not dash from Debian/Ubuntu), you can use $'...'
, which interprets those sequences:
$ mkdir $'foon'
(See bash's documentation for this feature, called "ANSI C Quoting").
Another option, that should work in any shell compatible with bourne shell is to insert an actual newline:
$ mkdir 'foo
'
That's an actual Return at the end of the first line, only closing the single quote on the second line.
The problem is not in find
, but in how you're creating this directory. The single quoted string 'foon'
is actually a 5-character string, of which the last two are a backslash and a lowercase "n".
Double-quoting it doesn't help either, since double-quoted strings in shell use backslash as an escape character, but don't really interpret any of the C-style backslash sequences.
In a shell such as bash or zsh, etc. (but not dash from Debian/Ubuntu), you can use $'...'
, which interprets those sequences:
$ mkdir $'foon'
(See bash's documentation for this feature, called "ANSI C Quoting").
Another option, that should work in any shell compatible with bourne shell is to insert an actual newline:
$ mkdir 'foo
'
That's an actual Return at the end of the first line, only closing the single quote on the second line.
edited 1 hour ago
answered 1 hour ago
filbrandenfilbranden
8,76921241
8,76921241
add a comment |
add a comment |
Let's make a directory named foo
plus a newline:
$ mkdir $'foon'
Now, let's use find:
$ find . -print0 | od -c
0000000 . . / f o o n
0000011
n
is not escaped.
The issue is that mkdir 'foon'
is the name is interpreted as foo
followed by followed by
n
. We can verify that with:
$ printf '%s' 'foon' | od -c
0000000 f o o n
0000005
add a comment |
Let's make a directory named foo
plus a newline:
$ mkdir $'foon'
Now, let's use find:
$ find . -print0 | od -c
0000000 . . / f o o n
0000011
n
is not escaped.
The issue is that mkdir 'foon'
is the name is interpreted as foo
followed by followed by
n
. We can verify that with:
$ printf '%s' 'foon' | od -c
0000000 f o o n
0000005
add a comment |
Let's make a directory named foo
plus a newline:
$ mkdir $'foon'
Now, let's use find:
$ find . -print0 | od -c
0000000 . . / f o o n
0000011
n
is not escaped.
The issue is that mkdir 'foon'
is the name is interpreted as foo
followed by followed by
n
. We can verify that with:
$ printf '%s' 'foon' | od -c
0000000 f o o n
0000005
Let's make a directory named foo
plus a newline:
$ mkdir $'foon'
Now, let's use find:
$ find . -print0 | od -c
0000000 . . / f o o n
0000011
n
is not escaped.
The issue is that mkdir 'foon'
is the name is interpreted as foo
followed by followed by
n
. We can verify that with:
$ printf '%s' 'foon' | od -c
0000000 f o o n
0000005
edited 1 hour ago
answered 1 hour ago
John1024John1024
47k5110125
47k5110125
add a comment |
add a comment |
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.
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%2funix.stackexchange.com%2fquestions%2f502460%2fwhat-is-wrong-with-my-use-of-find-print0%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
1
You made a directory called literally
foon
, with a backslash in its name.– Michael Homer
1 hour ago
2
Soo ... embarrassing .... but learned something from the answers, thank you all.
– Metamorphic
1 hour ago