スクリプトは、破るしようとしています。
Inianも正しく約symlinksです。
のみ、通常のファイルが検索され、安全で標準溶液の下にあります:追加のNULLで見つかったファイルの
find folder/ -type f -name 'spreadsheet.csv' -printf "%p\0" | xargs -0 sh -c '
newlocdir=/new/location;
COUNTER=$(ls -1 "${newlocdir}"/spreadsheet*.csv 2>/dev/null | awk "END {print NR}") ;
for f ; do
cp -v "${f}" "${newlocdir}"/spreadsheet$COUNTER.csv;
COUNTER=$(($COUNTER+1));
done' dummyarg0
-printf "%p\0"
プリントのパス名を。
xargs -0
は、見つかったファイルを読み取り、エントリ間のセパレータとしてNULL文字を考慮することができます。
| awk "END {print NR}"
は、パイプラインから読み取る行数を表示します。
COUNTER=$(ls -1 "${newlocdir}"/spreadsheet*.csv 2>/dev/null | awk "END {print NR}")
は、すでに新しい場所に存在するファイルの番号をCOUNTER変数に格納します。
for f ; do
は、位置パラメータを読み取ります。ファイル名はxargs
によって提供されます。
sh -c ' .... ' dummyarg0
sh
は、提供されたコマンドを実行します。 dummyarg0
は、必須の最初のパラメータです。 sh
は、特殊パラメータ0の値をdummyarg0
(未使用)に設定します。
テスト:
$ find folder/
folder/
folder/dir2
folder/dir2/spreadsheet.csv
folder/foo bar
folder/foo bar/spreadsheet.csv
folder/spreadsheet.csv
folder/tr"uc
folder/tr"uc/spreadsheet.csv
folder/fo'o
folder/fo'o/spreadsheet.csv
folder/dir1
folder/dir1/spreadsheet.csv
$ find folder/ -type f -name 'spreadsheet.csv' -printf "%p\0" | xargs -0 sh -c '
newlocdir=.;
COUNTER=$(ls -1 "${newlocdir}"/spreadsheet*.csv 2>/dev/null | awk "END {print NR}") ;
for f ; do
cp -v "${f}" "${newlocdir}"/spreadsheet$COUNTER.csv;
COUNTER=$(($COUNTER+1));
done' dummyarg0
`folder/dir2/spreadsheet.csv' -> `./spreadsheet0.csv'
`folder/foo bar/spreadsheet.csv' -> `./spreadsheet1.csv'
`folder/spreadsheet.csv' -> `./spreadsheet2.csv'
`folder/tr"uc/spreadsheet.csv' -> `./spreadsheet3.csv'
`folder/fo\'o/spreadsheet.csv' -> `./spreadsheet4.csv'
`folder/dir1/spreadsheet.csv' -> `./spreadsheet5.csv'
このウェブサイトのフォーマットに従ってください。質問に問題を提起し、以下の答えを記入してください。 – chepner
Bash '$ [...算術...]'表記は、 '$((...算術...))'または '((...算術...))'の代わりに非難されることに注意してください - [算術拡張](https:// www.gnu.org/software/bash/manual/bash.html#Arithmetic-Expansion)。単一の大括弧で囲まれた '$ [...]'はこれ以上文書化されていません。 –