सबसे अच्छी विधि के लिए स्टीफन के उत्तर को देखें, अधिक स्पष्ट समाधानों का उपयोग न करने के कारणों के लिए मेरे उत्तर पर एक नज़र डालें (और वे सबसे कुशल क्यों नहीं हैं इसके कारणों)।
आप के -I
विकल्प का उपयोग कर सकते हैं xargs
:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
जो एक समान तंत्र में find
और के लिए काम करता है {}
। मैं आपके -name
तर्क को भी उद्धृत करूँगा (क्योंकि x
वर्तमान निर्देशिका में शुरू होने वाली फ़ाइल फ़ाइल-ग्लोब होगी और खोजने के तर्क के रूप में पारित हो जाएगी - जो अपेक्षित व्यवहार नहीं देगी!)।
हालाँकि, जैसा कि मैनटवर्क द्वारा बताया गया है, जैसा कि xargs
मैन पेज में विस्तृत है :
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.
ध्यान देने वाली महत्वपूर्ण बात यह है कि -L 1
इसका मतलब यह है कि एक समय में आउटपुट की केवल एक पंक्ति को find
संसाधित किया जाएगा। इसका अर्थ है कि यह वाक्यात्मक रूप से समान है:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(जो प्रत्येक फ़ाइल के mv
लिए एकल ऑपरेशन निष्पादित करता है )।
यहां तक कि ग्नू -0
xargs तर्क और तर्क का उपयोग करने पर find -print0
बिल्कुल समान व्यवहार का कारण बनता है -I
- यह clone()
प्रत्येक फ़ाइल के लिए एक प्रक्रिया है mv
:
find . -name "x*" -print0 | strace xargs -0 -I '{}' mv '{}' /tmp/other
.
.
read(0, "./foobar1/xorgslsala11\0./foobar1"..., 4096) = 870
mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb82fad000
open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26066, ...}) = 0
mmap(NULL, 26066, PROT_READ, MAP_SHARED, 3, 0) = 0x7fbb82fa6000
close(3) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 661
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 661
--- SIGCHLD (Child exited) @ 0 (0) ---
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 662
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 662
--- SIGCHLD (Child exited) @ 0 (0) ---
.
.
.
-I
:find . | xargs -I'{}' mv '{}' ~/play/
लेकिन जैसा कि आदमी कहता है, कि "इम्प्लाईज-x
और-L 1
।" तो कोई फायदा नहीं हुआ। बेहतर है कि इसे सरल रखें और उपयोग करेंfind . -exec mv '{}' ~/play/ \;