macOS에는 확장자가 .csv인 파일을 찾는 스크립트가 있습니다. 그런 다음 강제로 백업하여 해당 파일을 복사합니다. 그러나 bash 컴파일러는 불평합니다.
find -E . -regex './.*csv' -type f -wholename '.*' -exec cp -f -r {} {} \;
예를 들어 다음과 같은 결과가 출력됩니다.
cp: ./banknotes.csv and ./banknotes.csv are identical (not copied).
cp: ./crabs.csv and ./crabs.csv are identical (not copied).
cp: ./dogmandibles.csv and ./dogmandibles.csv are identical (not copied).
cp: ./winequality-white-3.csv and ./winequality-white-3.csv are identical (not copied).
...
그리고 이 파일 중 어느 것도 복사되지 않습니다. 목표는 .csv
확장명이 있는 파일을 찾은 다음 동일한 디렉터리에서 해당 파일의 복사본을 실행하는 것입니다. 따라서 중복된 파일이 있습니다.
고쳐 쓰다:
예를 들어, 발견된 파일을 열거하여 증가하는 양의 정수 값을 추가하려는 경우:
find . -name '*.csv'| while ((i++)); read lines; do echo $lines | sed -E "s|[^\.]*$|$i.csv|g" | xargs -I{} cp $lines {} ; done
그러나 특정 숫자를 추가하려면 다음을 수행하십시오.
find . -name '*.csv'| while read lines; do sed -E "s|[^\.]*$|2.csv|g" | xargs -I{} cp $lines {} ; done
첫 번째는 파일 출력에 대해 다음을 수행합니다.
file_x.csv
file_y.csv
file_x.1.csv
file_y.2.csv
두 번째 옵션은 다음을 수행합니다.
file_x.csv
file_y.csv
file_x.2.csv
file_y.2.csv
답변1
동일한 디렉터리에 동일한 이름을 가진 두 개의 파일이 있을 수 없습니다. 동일한 파일이기 때문에 불가능합니다. 가장 좋은 방법은 다른 이름으로 백업 복사본을 만드는 것입니다. 또한 귀하의 은 -wholename
여기서 유용한 작업을 수행하지 않습니다. 파일 이름에 a가 포함되어 있는지 확인하는 것뿐입니다. .
그러나 을 찾고 있으므로 -regex ./.*csv
모든 결과는 a로 시작하므로 ./
모든 결과가 일치합니다 .*
.
또한 ./*.csv
정규 표현식은 .로 끝나는 파일만 가져오는 csv
것이 아니라 이름이 로 끝나는 모든 항목과 일치 합니다 . 그냥 사용하면 더 간단하고 쉽습니다. 이 명령은 현재 디렉터리와 하위 디렉터리에서 csv 확장자를 가진 모든 파일을 찾습니다..csv
.csv
-regex
-regex './.*\.csv
-name
find . -name '*.csv'
이제 동일한 이름을 유지하면서 .csv.bak
확장자를 추가하여 각 파일의 백업 복사본을 만들려면 다음을 수행할 수 있습니다.
find . -name '*.csv' -exec cp {} {}.bak \;