บนเครื่อง Linux Centos 4 ฉันพยายามสร้างบรรทัดคำสั่ง bash แบบง่าย ๆ เพื่อเดินโครงสร้างไดเรกทอรีด้านล่างไดเรกทอรีปัจจุบันที่กำหนดเองและในแต่ละไดเรกทอรีย่อยให้แตะที่ไฟล์รายการเนื้อหาของไดเรกทอรี แต่ไปป์/dev/null
และลบไฟล์ที่ถูกสัมผัส จุดที่ไม่ชัดเจนของสคริปต์นี้คือการทำให้ระบบไคลเอ็นต์ / เซิร์ฟเวอร์ NFS ต้นแบบเพื่อให้แน่ใจว่าเนื้อหาของแต่ละไดเรกทอรีสะท้อนการเปลี่ยนแปลงที่เกิดขึ้นกับเครื่องอื่นซึ่งอาจใช้เวลาในการเผยแพร่ ฉันพบวิธีแก้ปัญหานี้เพื่อหลีกเลี่ยงความล่าช้า ละเว้นข้อดีของเหตุผลในการทำเช่นนี้เพราะเหตุใดฉันจึงไม่เสนอสคริปต์ทุบตี
[CentosMachine] find . -type d -print0 | xargs -0 -I {} pushd {}; touch xYzZy.fixZ; ls &> /dev/null; rm -f xYzZy.fixZ; popd
xargs: pushd: No such file or directory
bash: popd: directory stack empty
find
คำสั่งเป็นปัจจุบันกลับ:
.
./dir
./emptyDir
./dirOfDir
./dirOfDir/ofDir
./dirOfDir/ofDir/Dir(empty)
ตอนแรกฉันคิดว่าอาจ(
และ)
ในหนึ่งในชื่อไดเรกทอรีอาจเป็นปัญหา แต่การเปลี่ยนชื่อไดเรกทอรีที่จะ./dirOfDir/ofDir/Dir_empty_
ไม่เปลี่ยนอาการ ฉันลองดูstrace
ผลลัพธ์ แต่ไม่เห็นอะไรที่ช่วย แต่ได้เห็นไดเรกทอรีที่กำลังประมวลผล
นี่เป็นตัวอย่างของการสิ้นสุดของstrace
ผลลัพธ์ที่มีการเปลี่ยนชื่อไดเรกทอรีให้ใช้เครื่องหมายขีดล่างแทนวงเล็บ:
[...]
chdir("ofDir") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("Dir_empty_", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
open("Dir_empty_", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 2 entries */, 32768) = 48
getdents64(4, /* 0 entries */, 32768) = 0
close(4) = 0
chdir("Dir_empty_") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fchdir(3) = 0
write(1, ".\0./dir\0./emptyDir\0./dirOfDir\0./"..., 75) = 75
exit_group(0) = ?
xargs
ไม่สามารถใช้คำสั่งผสมได้ คุณต้องล้อมคำสั่งผสมในสตริงและส่งไปยังเชลล์