ಪ್ರೊಹೋಸ್ಟರ್ > Блог > ಆಡಳಿತ > cp ಆಜ್ಞೆ: *nix ನಲ್ಲಿ ಫೈಲ್ ಫೋಲ್ಡರ್ಗಳನ್ನು ಸರಿಯಾಗಿ ನಕಲಿಸುವುದು
cp ಆಜ್ಞೆ: *nix ನಲ್ಲಿ ಫೈಲ್ ಫೋಲ್ಡರ್ಗಳನ್ನು ಸರಿಯಾಗಿ ನಕಲಿಸುವುದು
ಈ ಲೇಖನವು ಬಳಕೆಗೆ ಸಂಬಂಧಿಸಿದ ಕೆಲವು ಸ್ಪಷ್ಟವಲ್ಲದ ವಿಷಯಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳು ನಕಲಿಸುವಾಗ, ಅಸ್ಪಷ್ಟ ಆಜ್ಞೆಯ ನಡವಳಿಕೆ cp ನಕಲಿಸುವಾಗ, ಹಾಗೆಯೇ ಸ್ಕಿಪ್ ಅಥವಾ ಕ್ರ್ಯಾಶ್ ಮಾಡದೆಯೇ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಫೈಲ್ಗಳನ್ನು ಸರಿಯಾಗಿ ನಕಲಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುವ ವಿಧಾನಗಳು.
ನಾವು /ಸೋರ್ಸ್ ಫೋಲ್ಡರ್ನಿಂದ / ಟಾರ್ಗೆಟ್ ಫೋಲ್ಡರ್ಗೆ ಎಲ್ಲವನ್ನೂ ನಕಲಿಸಬೇಕಾಗಿದೆ ಎಂದು ಹೇಳೋಣ.
ಮನಸ್ಸಿಗೆ ಬರುವ ಮೊದಲ ವಿಷಯವೆಂದರೆ:
cp /source/* /target
ಈ ಆಜ್ಞೆಯನ್ನು ತಕ್ಷಣವೇ ಸರಿಪಡಿಸೋಣ:
cp -a /source/* /target
ಕೀ -a ಎಲ್ಲಾ ಗುಣಲಕ್ಷಣಗಳು, ಹಕ್ಕುಗಳ ನಕಲು ಮತ್ತು ಪುನರಾವರ್ತನೆಯನ್ನು ಸೇರಿಸುತ್ತದೆ. ಹಕ್ಕುಗಳ ನಿಖರವಾದ ಪುನರುತ್ಪಾದನೆ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದಾಗ, ಒಂದು ಕೀಲಿಯು ಸಾಕಾಗುತ್ತದೆ -r.
ನಕಲು ಮಾಡಿದ ನಂತರ, ಎಲ್ಲಾ ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗಿಲ್ಲ ಎಂದು ನಾವು ಕಂಡುಕೊಳ್ಳುತ್ತೇವೆ - ಡಾಟ್ನಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಫೈಲ್ಗಳು:
.profile
.local
.mc
ಮತ್ತು ಹಾಗೆ.
ಇದು ಏಕೆ ಸಂಭವಿಸಿತು?
ಏಕೆಂದರೆ ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳನ್ನು ಶೆಲ್ನಿಂದ ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ (bash ಒಂದು ವಿಶಿಷ್ಟ ಸಂದರ್ಭದಲ್ಲಿ). ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಡಾಟ್ಗಳಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಎಲ್ಲಾ ಫೈಲ್ಗಳನ್ನು ಬ್ಯಾಷ್ ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಅದು ಅವುಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ ಎಂದು ಪರಿಗಣಿಸುತ್ತದೆ. ಈ ನಡವಳಿಕೆಯನ್ನು ತಪ್ಪಿಸಲು ನಾವು ನಡವಳಿಕೆಯನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ bash ಆಜ್ಞೆಯನ್ನು ಬಳಸಿ:
shopt -s dotglob
ರೀಬೂಟ್ ಮಾಡಿದ ನಂತರ ಈ ನಡವಳಿಕೆಯ ಬದಲಾವಣೆಯು ಮುಂದುವರಿಯುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಫೋಲ್ಡರ್ನಲ್ಲಿ ಈ ಆಜ್ಞೆಯೊಂದಿಗೆ ನೀವು ವೈಲ್ಡ್ಕಾರ್ಡ್.ಎಸ್ ಫೈಲ್ ಅನ್ನು ರಚಿಸಬಹುದು /etc/profile.d (ಬಹುಶಃ ನಿಮ್ಮ ವಿತರಣೆಯು ಬೇರೆ ಫೋಲ್ಡರ್ ಅನ್ನು ಹೊಂದಿದೆ).
ಮತ್ತು ಮೂಲ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಯಾವುದೇ ಫೈಲ್ಗಳಿಲ್ಲದಿದ್ದರೆ, ನಕ್ಷತ್ರ ಚಿಹ್ನೆಯ ಸ್ಥಳದಲ್ಲಿ ಶೆಲ್ ಯಾವುದನ್ನೂ ಬದಲಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ ಮತ್ತು ನಕಲು ಮಾಡುವುದು ದೋಷದೊಂದಿಗೆ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ. ಈ ಪರಿಸ್ಥಿತಿಯ ವಿರುದ್ಧ ಆಯ್ಕೆಗಳಿವೆ failglob и nullglob. ನಾವು ಹೊಂದಿಸಬೇಕಾಗಿದೆ failglob, ಇದು ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. nullglob ಇದು ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಇದು ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆಯನ್ನು ಕಂಡುಹಿಡಿಯದ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್ಗೆ (ಶೂನ್ಯ ಉದ್ದ) ಪರಿವರ್ತಿಸುತ್ತದೆ, ಇದಕ್ಕಾಗಿ cp ದೋಷವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.
ಆದಾಗ್ಯೂ, ಫೋಲ್ಡರ್ನಲ್ಲಿ ಸಾವಿರಾರು ಅಥವಾ ಹೆಚ್ಚಿನ ಫೈಲ್ಗಳು ಇದ್ದರೆ, ನಂತರ ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳ ವಿಧಾನವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತ್ಯಜಿಸಬೇಕು. ವಾಸ್ತವವೆಂದರೆ ಅದು bash ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳನ್ನು ಬಹಳ ದೀರ್ಘವಾದ ಆಜ್ಞಾ ಸಾಲಿನಂತೆ ವಿಸ್ತರಿಸುತ್ತದೆ:
cp -a /souce/a /source/b /source/c …… /target
ಆಜ್ಞಾ ಸಾಲಿನ ಉದ್ದದ ಮೇಲೆ ಮಿತಿ ಇದೆ, ಅದನ್ನು ನಾವು ಆಜ್ಞೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಕಂಡುಹಿಡಿಯಬಹುದು:
getconf ARG_MAX
ಬೈಟ್ಗಳಲ್ಲಿ ಆಜ್ಞಾ ಸಾಲಿನ ಗರಿಷ್ಠ ಉದ್ದವನ್ನು ಪಡೆಯೋಣ:
2097152
ಅಥವಾ:
xargs --show-limits
ನಾವು ಅಂತಹದನ್ನು ಪಡೆಯುತ್ತೇವೆ:
….
Maximum length of command we could actually use: 2089314
….
ಆದ್ದರಿಂದ, ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳಿಲ್ಲದೆಯೇ ಮಾಡೋಣ.
ಸುಮ್ಮನೆ ಬರೆಯೋಣ
cp -a /source /target
ಮತ್ತು ಇಲ್ಲಿ ನಾವು ನಡವಳಿಕೆಯ ಅಸ್ಪಷ್ಟತೆಯನ್ನು ಎದುರಿಸುತ್ತೇವೆ cp. / ಟಾರ್ಗೆಟ್ ಫೋಲ್ಡರ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ, ನಮಗೆ ಬೇಕಾದುದನ್ನು ನಾವು ಪಡೆಯುತ್ತೇವೆ.
ಆದಾಗ್ಯೂ, ಗುರಿ ಫೋಲ್ಡರ್ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ, ನಂತರ ಫೈಲ್ಗಳನ್ನು /ಟಾರ್ಗೆಟ್/ಸೋರ್ಸ್ ಫೋಲ್ಡರ್ಗೆ ನಕಲಿಸಲಾಗುತ್ತದೆ.
ನಾವು ಯಾವಾಗಲೂ / ಗುರಿ ಫೋಲ್ಡರ್ ಅನ್ನು ಮುಂಚಿತವಾಗಿ ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಅದು ನಮಗೆ ಅಗತ್ಯವಿರುವ ಫೈಲ್ಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು ಮತ್ತು ನಮ್ಮ ಗುರಿ, ಉದಾಹರಣೆಗೆ, / ಮೂಲದಿಂದ ಫೈಲ್ಗಳೊಂದಿಗೆ / ಗುರಿಯಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ಪೂರಕಗೊಳಿಸುವುದು.
ಮೂಲ ಮತ್ತು ಗಮ್ಯಸ್ಥಾನದ ಫೋಲ್ಡರ್ಗಳನ್ನು ಒಂದೇ ಹೆಸರಿಸಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ, ನಾವು /ಮೂಲದಿಂದ /ಮನೆ/ಮೂಲಕ್ಕೆ ನಕಲಿಸುತ್ತಿದ್ದೇವೆ, ನಂತರ ನಾವು ಆಜ್ಞೆಯನ್ನು ಬಳಸಬಹುದು:
cp -a /source /home
ಮತ್ತು ನಕಲು ಮಾಡಿದ ನಂತರ, /ಮನೆ/ಮೂಲದಲ್ಲಿರುವ ಫೈಲ್ಗಳು /ಮೂಲದಿಂದ ಫೈಲ್ಗಳೊಂದಿಗೆ ಪೂರಕವಾಗಿರುತ್ತವೆ.
ಇದು ತಾರ್ಕಿಕ ಸಮಸ್ಯೆಯಾಗಿದೆ: ಫೋಲ್ಡರ್ಗಳನ್ನು ಒಂದೇ ಹೆಸರಿಸಿದರೆ ನಾವು ಗಮ್ಯಸ್ಥಾನ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಫೈಲ್ಗಳನ್ನು ಸೇರಿಸಬಹುದು, ಆದರೆ ಅವು ವಿಭಿನ್ನವಾಗಿದ್ದರೆ, ಮೂಲ ಫೋಲ್ಡರ್ ಅನ್ನು ಗಮ್ಯಸ್ಥಾನದ ಒಳಗೆ ಇರಿಸಲಾಗುತ್ತದೆ. ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳಿಲ್ಲದೆ cp ಅನ್ನು ಬಳಸಿಕೊಂಡು / ಮೂಲದಿಂದ / ಗುರಿಗೆ ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸುವುದು ಹೇಗೆ?
ಈ ಹಾನಿಕಾರಕ ಮಿತಿಯನ್ನು ನಿವಾರಿಸಲು, ನಾವು ಸ್ಪಷ್ಟವಲ್ಲದ ಪರಿಹಾರವನ್ನು ಬಳಸುತ್ತೇವೆ:
cp -a /source/. /target
DOS ಮತ್ತು Linux ನೊಂದಿಗೆ ಪರಿಚಿತವಾಗಿರುವವರು ಈಗಾಗಲೇ ಎಲ್ಲವನ್ನೂ ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದಾರೆ: ಪ್ರತಿ ಫೋಲ್ಡರ್ ಒಳಗೆ 2 ಅದೃಶ್ಯ ಫೋಲ್ಡರ್ಗಳಿವೆ "." ಮತ್ತು "..", ಇದು ಪ್ರಸ್ತುತ ಮತ್ತು ಹೆಚ್ಚಿನ ಡೈರೆಕ್ಟರಿಗಳಿಗೆ ಹುಸಿ-ಫೋಲ್ಡರ್ಗಳ ಲಿಂಕ್ಗಳಾಗಿವೆ.
ನಕಲು ಮಾಡುವಾಗ cp ಅಸ್ತಿತ್ವವನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು / ಗುರಿ/ ರಚಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ.
ಅಂತಹ ಡೈರೆಕ್ಟರಿ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ ಮತ್ತು ಅದು / ಗುರಿಯಾಗಿದೆ
/ಮೂಲದಿಂದ ಫೈಲ್ಗಳನ್ನು ಸರಿಯಾಗಿ / ಗುರಿಗೆ ನಕಲಿಸಲಾಗಿದೆ.
ಆದ್ದರಿಂದ, ಅದನ್ನು ನಿಮ್ಮ ಸ್ಮರಣೆಯಲ್ಲಿ ಅಥವಾ ಗೋಡೆಯ ಮೇಲೆ ದಪ್ಪ ಚೌಕಟ್ಟಿನಲ್ಲಿ ಸ್ಥಗಿತಗೊಳಿಸಿ:
cp -a /source/. /target
ಈ ಆಜ್ಞೆಯ ನಡವಳಿಕೆಯು ಸ್ಪಷ್ಟವಾಗಿದೆ. ನೀವು ಮಿಲಿಯನ್ ಫೈಲ್ಗಳನ್ನು ಹೊಂದಿದ್ದೀರಾ ಅಥವಾ ಯಾವುದೂ ಇಲ್ಲವೇ ಎಂಬುದನ್ನು ಲೆಕ್ಕಿಸದೆ ಎಲ್ಲವೂ ದೋಷಗಳಿಲ್ಲದೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಸಂಶೋಧನೆಗಳು
ನೀವು ನಕಲು ಮಾಡಬೇಕಾದರೆ ಎಲ್ಲಾ ಒಂದು ಫೋಲ್ಡರ್ನಿಂದ ಇನ್ನೊಂದಕ್ಕೆ ಫೈಲ್ಗಳು, ನಾವು ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಬದಲಿಗೆ ಅವುಗಳನ್ನು ಬಳಸುವುದು ಉತ್ತಮ cp ಮೂಲ ಫೋಲ್ಡರ್ನ ಕೊನೆಯಲ್ಲಿ ಒಂದು ಅವಧಿಯೊಂದಿಗೆ ಸಂಯೋಜಿಸಲಾಗಿದೆ. ಇದು ಮರೆಮಾಡಿದ ಫೈಲ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸುತ್ತದೆ ಮತ್ತು ಲಕ್ಷಾಂತರ ಫೈಲ್ಗಳೊಂದಿಗೆ ವಿಫಲವಾಗುವುದಿಲ್ಲ ಅಥವಾ ಯಾವುದೇ ಫೈಲ್ಗಳಿಲ್ಲ.
ನಂತರದ
vmspike ಇದೇ ರೀತಿಯ ಫಲಿತಾಂಶದೊಂದಿಗೆ ಕಮಾಂಡ್ ಆವೃತ್ತಿಯನ್ನು ಸೂಚಿಸಲಾಗಿದೆ: