파일 이름 시작 부분에 10자리 숫자가 추가된 수천 개의 이미지 파일이 있습니다. 10자리의 각 문자열 뒤에는 밑줄이 옵니다. 그것들은 다음과 같습니다:
1318487644_IMG_2158.jpg
다음 내용을 방해하지 않고 10dig 숫자와 밑줄을 제거해야 합니다. 결과는 다음과 같습니다.
IMG_2158.jpg
파일 이름에서 원하지 않는 다른 콘텐츠를 찾거나 바꾸려면 이 명령을 사용합니다.
ls -1 | while read file; do new_file=$(echo $file | sed s/foo/bar/g); mv "$file" "$new_file"; done
파일 이름의 나머지 부분을 변경하지 않고 선행 10dig+밑줄 조합을 제거하려면 위 명령을 편집하려면 어떻게 해야 합니까?
답변1
어떤 사람들은 ls
출력을 구문 분석하는 것이 나쁜 습관이라고 생각합니다. 따라서 다음과 같이 보일 수 있습니다(posix 쉘을 가정).
for file in /path/to/file/*
do
part_to_remove=$(echo "$file" | grep -Eo '[[:digit:]]{10}_')
if ! [ -z $part_to_remove ]; then
new_file="${file#$part_to_remove}"
mv "$file" "new_file"
fi
done
답변2
POSIX적으로:
for f in ./*; do
mv -- "$f" "${f#./[0-9]*_}"
done