Regex ไม่มีส่วนเกี่ยวข้องที่นี่ สัญลักษณ์แทนใน bash (เช่นเชลล์อื่น ๆ ส่วนใหญ่) จับคู่ไฟล์ตามชื่อไฟล์เท่านั้นไม่ได้ยึดตามประเภทไฟล์หรือคุณสมบัติอื่น ๆ มีวิธีหนึ่งที่จะจับคู่ตามประเภท: การเพิ่ม/
ที่ส่วนท้ายของรูปแบบทำให้ตรงกับไดเรกทอรีหรือลิงก์สัญลักษณ์ไปยังไดเรกทอรีเท่านั้น ด้วยวิธีนี้คุณสามารถย้ายไดเรกทอรีจากนั้นย้ายสิ่งที่เหลืออยู่และย้ายไดเรกทอรีกลับ - ยุ่งยาก แต่ใช้งานได้
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
find
วิธีการมาตรฐานเพื่อให้ตรงกับไฟล์ตามประเภทคือการเรียก
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
ใน zsh คุณสามารถใช้ตัวระบุแบบกลมเพื่อจับคู่ไฟล์ตามประเภท .
คัดเลือกตรงกับไฟล์ปกติ; ใช้^/
เพื่อจับคู่กับไดเรกทอรีที่ไม่ใช่ทั้งหมดหรือ-^/
เพื่อรวมลิงก์สัญลักษณ์ไปยังไดเรกทอรี
mv -- *(.) other_directory/
ในเชลล์ใด ๆ คุณสามารถวนซ้ำได้
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done