다음을 사용하여 파일을 만들었습니다.
$ ls > ls.txt
이제 다른 디렉토리로 이동하여 이 파일을 사용하여 이름이 ls.txt
.
이를 수행하는 가장 쉬운 방법은 무엇입니까?
답변1
당신은 그것을 사용할 수 있습니다 xargs
. 새 디렉토리로 전환한 후,
xargs -d '\n' touch -- < path/to/ls.txt
원래 출력에 디렉터리가 있는 경우 ls
해당 디렉터리는 새 위치에 일반 파일로 생성됩니다.
답변2
한 걸음 물러나도록 격려해 드리겠습니다.
실제 문제는 "현재 디렉터리에 일부 파일이 있고 다른 디렉터리에 같은 이름의 빈 파일을 만들고 싶습니다."인 것 같습니다.
이를 수행하는 합리적인 방법은 결과를 ls
파일에 저장하는 것이라고 생각합니다. 이것은 합리적인 가정이지만 확실히 유일한 방법은 아닙니다!
그러면 다음은 어떻습니까?
for filename in *; do
touch -- "/path/to/somewhere/else/${filename}"
done
/path/to/somewhere/else/
파일이 생성될 디렉터리는 어디에 있습니까?
이 방법은 간단하고 읽기 쉽습니다. 또한 파일 이름의 공백, 줄 바꿈 및 특수 문자에 대해서도 완전히 안정적입니다. ls
귀하의 프로필이 ls --color
.
단점은 파일이 많으면 추가 작업이 많이 필요할 수 있다는 것입니다. 하지만 실제로 문제가 발생하기 전까지는 걱정하지 마세요. *
또 다른 단점은 현재 디렉터리에 파일이 없으면 문자 그대로 이라는 파일이 생성된다는 것입니다 . 루프 전에 작성하면 이를 방지 *
할 수 있습니다 .shopt -s nullglob
d
(다른 솔루션과 마찬가지로) 현재 디렉터리에 디렉터리가 있으면 d
대상에 새로운 빈 파일이 생성된다는 점에 유의하세요. 이를 피하고 싶다면 다음과 같이 작성할 수 있습니다.
for filename in *; do
if [ -f "${filename}" ]; then
touch -- "/path/to/somewhere/else/${filename}"
fi
done
일반 파일만 처리됩니다.
* 문제가 있는 경우: printf '\0\n' * | (cd /path/to/somewhere/else; xargs -0 touch --)
수정하면 좋을 것 같습니다.
답변3
sed "s/\(.*\)/touch '\1'/" < ls.txt | sh
이는 파일 생성을 사용 touch
하고 쉘 세션에 스크립트를 쓰는 쉘 스크립트로 파일을 변환합니다. 파일을 원하는 폴더에서 이 명령을 실행하세요. 다른 폴더에 있는 경우 ls.txt
정규화된 이름으로 바꾸세요.
답변4
OFS=$IFS;
IFS=$'\n';
cd to_new_location;
for file in `cat /path/to/ls.txt`; do
touch $file;
done;
IFS=$OFS;